FDA Reading Room 483 Topic Modeling Analysis

Authored By: Nick Cruickshank

In [1]:
import datetime #import date
today_formatted = datetime.datetime.today().strftime("%m/%d/%Y")
print("Script last ran on {}".format(today_formatted))
Script last ran on 05/20/2021

Reading Room Unsplash

The FDA Reading Room provides a dynamically created data table of "ORA domestic inspection and related records." In other words, it is an open-access source of FDA Audit Observations captured on Form 483. When browsing the data table, you can click on any cell in the Record Type field, and it will open a redacted version of the Form 483 that the audited Company received. Through the use of web scraping tools such as BeautifulSoup and Selenium it is possible to extract these hyperlinks and download the associated PDF files. Once those PDFs have been downloaded, Optical Character Recognition (OCR) can be performed on the PDFs using the Tesseract engine after splitting each page into distinct JPG files. With each Form F83 processed in this way, it is possible apply machine learning principles to perform Topic Modeling on the resulting text documents. This will in turn enable an FDA Regulated Company to understand what topics the FDA cares about during audits, which topics are surging in popularity, and which topics individual auditors care about the most.

In [2]:
# import packages
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import datetime
import requests
import lxml
import html5lib 
from bs4 import BeautifulSoup
import janitor
import tempfile
import os # to get current opperating system
import shutil
import time

import cv2
from PIL import Image
from pathlib import Path
from pdf2image import convert_from_path

import pytesseract
# be sure to modify this path as appropriate
pytesseract.pytesseract.tesseract_cmd = r'C:\Users\ncruickshank\AppData\Local\Programs\Tesseract-OCR\tesseract.exe'

# selenium functions
from selenium import webdriver
from selenium.webdriver.common.keys import Keys #allow  you to enter keystrokes into fields
from selenium.webdriver.support.ui import Select #allow you to select a dropdown item
from selenium.webdriver.support.ui import WebDriverWait #lets you modify a field before proceeding
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# for machine learning / topic modeling phase
import nltk
from nltk.stem import WordNetLemmatizer
from nltk.corpus import stopwords
import re
from pprint import pprint
import gensim
import gensim.corpora as corpora
from gensim.utils import simple_preprocess
from gensim.models import CoherenceModel
import pyLDAvis
import pyLDAvis.gensim
import plotly.express as px
import operator

import warnings
warnings.filterwarnings("ignore",category=DeprecationWarning)

Get the Data: FDA Reading Room Web Scraping

web_scraping Unsplash

The first step of this process is to read the data table in the FDA Reading Room into python. The Selenium package essentially interprets python code as instructions for how to navigate a web page. For example, the website provides a useful filtering feature, which means we can do some of the filtering up front by having our Selenium driver select "483" from the drop down menu.

In [3]:
cwd = os.getcwd()
temp483pdf_filepath = cwd + '\\temp483pdf'
temp483images_filepath = cwd + '\\temp483images'

# these custom preferences will be used later to redirect downloads 
# from the generic download folder to a pre-defined folder
op = webdriver.ChromeOptions()
prefs = {"download.default_directory": temp483pdf_filepath,
        "download.prompt_for_download": False,
        "download.directory_upgrade": True,
         "download.extensions_to_open": "applications/pdf",
        "plugins.always_open_pdf_externally": True}

op.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome()

# use driver to open website
url = 'https://www.fda.gov/about-fda/office-regulatory-affairs/ora-foia-electronic-reading-room'
driver.get(url)

# utilize the filter box to select only 483s (value = 0)
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#lcds-datatable-filter--record-filter')))
select = Select(driver.find_element_by_css_selector('#lcds-datatable-filter--record-filter'))
select.select_by_visible_text("483")

Once the data table has been preliminarily filtered for "483"s we can read all of that information (including the hidden hyperlinks) into a python dataframe. This requires a few extra steps with our Selenium driver as the data table is paginated. So we need to read each row into a python dataframe, click the "Next Page" button, and then repeat until we hit the last page.

table class = lcsd-datatable--ora-foia-reading table table-bordered dataTable no footer dtr-inline

In [4]:
# compile the reading room dataframe
## get the table headers
### read the datatable of page 1 for the sake of retrieving headers
datatable_xpath = '//*[@id="DataTables_Table_0"]'
records = driver.find_element_by_xpath(datatable_xpath)
records_innerhtml = records.get_attribute('innerHTML')
soup = BeautifulSoup(records_innerhtml, 'html.parser')
trs = soup.findAll('tr')
headers = []
for th in trs[0].findAll('th'):
    headers.append(th.text)
headers

## scrape all rows in each page of the paginated datatable
final_page = int(driver.find_element_by_xpath('//*[@id="DataTables_Table_0_paginate"]/ul/li[8]').text)
rows = []
for page in range(1, final_page + 1):
    
    datatable_xpath = '//*[@id="DataTables_Table_0"]'
    records = driver.find_element_by_xpath(datatable_xpath)
    records_innerhtml = records.get_attribute('innerHTML')
    soup = BeautifulSoup(records_innerhtml, 'html.parser')
    trs = soup.findAll('tr')
    
    for i in range(1, len(trs)):
        tds = []
        for td in trs[i].findAll('td'):
            a = td.findAll('a')
            spans = td.findAll('span')
            inputs = td.findAll('input')
            ret = ""
            if len(a) != 0 or len(spans) != 0 or len(inputs) != 0:
                if len(a) != 0:
                    for link in a:
                        ret += link.text + ' - '+link['href']
                if len(spans) != 0:
                    for span in spans:
                        ret += span.text + ' - '+span['title']
                if len(inputs) != 0:
                    for inp in inputs:
                        if inp.has_attr('value'):
                            if inp.has_attr('type'):
                                if inp['type'] == 'hidden':
                                    ret += inp['value']
            else: 
                ret = td.text if td.text != '' and td.text != '\n' else "NaN"
            tds.append(ret)
        rows.append(tds)
        
    driver.find_element_by_xpath('//*[@id="DataTables_Table_0_next"]/a').click() #//*[@id="DataTables_Table_0_next"]/a
    #driver.find_element_by_class_name('paginate_button next').click()

print("Number of records scraped from the FDA Reading Room Data Table: ", len(rows))

# combine headers and rows into a pandas dataframe
df = pd.DataFrame(rows, columns = headers)

# tidy the dataframe
df[['Record Type', 'HREF']] = df['Record Type'].str.split(' - ', 1, expand = True)
df = df.clean_names()
df['pdf_url'] = 'https://www.fda.gov' + df['href']
print("Shape of tidied dataframe (rows, colums): ", df.shape)

# filter the dataframe
## create a list of establishment types which are related to our company
relavent_establishment_types = ['Producer of Sterile Drug Products', 'Outsourcing Facility', 'Manufacturer', 'Drug Manufacturer',
                               'Compounding Pharmacy', 'Producer of Non Sterile Drug Products', 'Sterile Drug Manufacturer', 
                               'Pharmaceutical Manufacturer', 'Human Drug Manufacturer', 'Biological Drug Manufacturer', 
                               'Active Pharmaceutical Ingredient Manufacturer', 'Manufacturer and Repacker', 
                               'Active Pharmaceutical Ingredient & Finished Dosage Manufacturer', 'Biotech API Manufacturer',
                               'Finished Pharmaceutical Manufacturer']

## set up the time range for audits of interest
two_years_ago = pd.to_datetime(datetime.datetime.today() - datetime.timedelta(days = 2*365))
two_years_ago_formatted = two_years_ago.strftime("%m/%d/%Y")

## perform the filtration
df2 = df[(df['establishment_type'].isin(relavent_establishment_types)) & (df['record_type'] == "483")].reset_index()
df2['record_date'] = pd.to_datetime(df2['record_date'])
df2['publish_date'] = pd.to_datetime(df2['publish_date'])
df2 = df2[df2['record_date'] > two_years_ago]
print("Shape of tidied and filtered dataframe (rows, columns): ", df2.shape)

# close the driver once this task is complete
driver.quit()
Number of records scraped from the FDA Reading Room Data Table:  1466
Shape of tidied dataframe (rows, colums):  (1466, 9)
Shape of tidied and filtered dataframe (rows, columns):  (70, 10)

Optical Character Recognition for each Form 483

https://medium.com/states-title/using-nlp-bert-to-improve-ocr-accuracy-385c98ae174c

Now that we have a dataframe which includes a column of hyperlinks to follow for each Form 483 we care about, we can have python download each file into our pre-selected filepath. We won't need these files forever, just long enough to perform Optical Character Recognition (OCR) on them. Once that is done the files can be deleted.

Download each PDF

In [5]:
cwd = os.getcwd()
temp483pdf_filepath = cwd + '\\temp483pdf'
temp483images_filepath = cwd + '\\temp483images'
temp483images2_filepath = cwd + '\\temp483images2'

# function to ensure the driver will wait until the current
# file has fully downloaded before proceeding with the for loop
def every_downloads_chrome(driver):
    if not driver.current_url.startswith("chrome://downloads"):
        driver.get("chrome://downloads/")
    return driver.execute_script("""
        var items = document.querySelector('downloads-manager')
            .shadowRoot.getElementById('downloadsList').items;
        if (items.every(e => e.state === "COMPLETE"))
            return items.map(e => e.fileUrl || e.file_url);
        """)

# get names of each downloaded file
ref_rows = []
for record in df2.pdf_url:
    row = []
    driver = webdriver.Chrome(options = op)
    # download the pdf
    driver.get(record)
    
    # get file names once fully dowloaded
    pdfs_path = WebDriverWait(driver, 120, 1).until(every_downloads_chrome)
    if "chrome://downloads" in driver.current_url:
        driver.close()
    
    # reformat file name for reference
    file = pdfs_path[0]
    str_start = file.find("483pdf/") + len("483pdf/")
    str_end = file.find(".pdf")
    file_name = file[str_start:str_end]
    
    row.append(record)
    row.append(file_name)
    ref_rows.append(row)
    driver.quit()
ref_headers = ['pdf_url', 'pdf_name']
refs = pd.DataFrame(ref_rows, columns = ref_headers)
refs
Out[5]:
pdf_url pdf_name
0 https://www.fda.gov/media/147184/download WellsPharmacy508ed_0
1 https://www.fda.gov/media/145127/download Lonza508ed
2 https://www.fda.gov/media/145108/download Novel508ed
3 https://www.fda.gov/media/145540/download Hopkinton508ed
4 https://www.fda.gov/media/144544/download AdvancedNutriceuticals508ed
... ... ...
65 https://www.fda.gov/media/135882/download MaitlandLabs508ed
66 https://www.fda.gov/media/132894/download RXQ508ed
67 https://www.fda.gov/media/128777/download FOI%20APPLIED_CustomCompCenter_LittleRockAR_48...
68 https://www.fda.gov/media/128709/download FOI%20APPLIED_PacificoAmEx_MelbourneFL_AMENDED...
69 https://www.fda.gov/media/128373/download FOI%20APPLIED_QuVa_BloomsburyNJ_483_05.31.19_R...

70 rows × 2 columns

Apply OCR to each PDF

Each of these downloaded PDFs can finally be processed through the Tesseract. This section of the notebook can take a while to run, as it is performing a variety of steps for each PDF in our temporary PDF folder. These steps include the following:

  • Separating each PDF into JPGs (one JPG per page)
  • Performing OCR on the first page of each PDF to extract the following information not found on the original Reading Room data table:
    • Firm Name
    • Establishment Type
    • Facility City
    • Auditors
    • Audit Dates
  • Performing OCR on the observations through a series of substeps:
    • Cropping out the header and footer of each page to leave only the observations
    • Stacking each observation page on top of each other to create one long JPG file
    • Performing OCR on the resulting long JPG file
  • Deleting the associated JPG files
  • Deleting the associated PDF file
In [6]:
# STEP 2: For each pdf, convert each page into jpg and save it in a new folder
rows = []
pdf_folder = Path(temp483pdf_filepath)
images_folder = Path(temp483images_filepath)
images2_folder = Path(temp483images2_filepath)
for pdf in pdf_folder.glob("*.pdf"): # pdfs_path:
    # get pdf name
    file_name = str(pdf.name)
    file_name2 = file_name[:file_name.find(".pdf")]
    
    # convert the pdf into jpgs
    images = []
    with tempfile.TemporaryDirectory() as temp_dir:
        pages = convert_from_path(pdf, 300, output_folder = temp_dir)
        i = 1
        
        for page in pages:
            if i < 10:
                pn = "0" + str(i)
            else: 
                pn = str(i)
            image_name = temp483images_filepath + "\\" + file_name + " - Page " + str(pn) + " of " + str(len(pages)) + ".jpg"
            page.save(image_name, 'JPEG')
            images.append(image_name)
            i = i + 1
    
    row = []
    row.append(file_name2)
    
    # crop the first page to parse info from headers and footers
    page = cv2.imread(images[0])
    
    # sometimes cv2 breaks during this process, in which case plt can be used as a workaround
    if page is None:
        page1 = plt.imread(images[0])
        page1 = page1[...,::-1]
    else:
        page1 = page
    
    ## firm name
    firm_coord = [(250, 615), (1328, 775)]
    firm = page1[firm_coord[0][1]:firm_coord[1][1], firm_coord[0][0]:firm_coord[1][0]]
    firm_text = str(pytesseract.image_to_string(firm))
    row.append(firm_text)
    
    # establishment type
    type_coord = [(1300, 650), (2415, 790)]
    firm_type = page1[type_coord[0][1]:type_coord[1][1], type_coord[0][0]:type_coord[1][0]]
    establishment_type_text = str(pytesseract.image_to_string(firm_type))
    row.append(establishment_type_text)
    
    ## facility city
    city_coord = [(250, 625), (1325, 790)]
    facility_city = page1[city_coord[0][1]:city_coord[1][1], city_coord[0][0]:city_coord[1][0]]
    city_text = str(pytesseract.image_to_string(facility_city))
    row.append(city_text)
    
    ## auditors
    auditors_coord = [(630, 2735), (1740, 2972)]
    auditors = page1[auditors_coord[0][1]:auditors_coord[1][1], auditors_coord[0][0]:auditors_coord[1][0]]
    auditors_text = str(pytesseract.image_to_string(auditors))
    row.append(auditors_text)

    ## audit dates
    audit_dates_coord = [(1558, 200), (2410, 305)]
    audit_dates = page1[audit_dates_coord[0][1]:audit_dates_coord[1][1], audit_dates_coord[0][0]:audit_dates_coord[1][0]]
    dates_text = str(pytesseract.image_to_string(audit_dates))
    row.append(dates_text)
    
    # observations crop
    cropped_observations = []
    for image_file in images_folder.glob("*.jpg"):
        image_file_name = str(image_file.name)
        
        ## read the image into the for loop
        image_path = temp483images_filepath + "\\" + image_file_name
        imagex = cv2.imread(image_path)
        
        # same cv2 bug workaround
        if imagex is None:
            image = plt.imread(image_path)
            image = image[...,::-1]
        else:
            image = imagex
        
        ## crop each JPG page of the original PDF for just the observation section
        obs_coord = [(150, 800), (2405, 2680)]
        observations = image[obs_coord[0][1]:obs_coord[1][1], obs_coord[0][0]:obs_coord[1][0]]
               
        ### get jpg name
        str_start = image_file_name.find(".pdf - ") + len(".pdf - ")
        str_end = image_file_name.find(".jpg")
        obs_name = image_file_name[str_start:str_end]   
                                  
        observations_filepath = temp483images2_filepath + "\\" + obs_name + " Observations.jpg"
        cv2.imwrite(observations_filepath, observations)
        cropped_observations.append(observations_filepath)
        image_file.unlink()
    
    # open the cropped observation images into a new PIL
    crops = list(map(Image.open, cropped_observations))
    
    # find minimum width of crops
    min_crop_width = min(i.width for i in crops)
    
    # find total height of all images
    total_height = 0
    for i, crop in enumerate(crops):
        total_height += crops[i].height
    
    # create perimeter of merged image
    merged_image = Image.new(crops[0].mode, (min_crop_width, total_height))
    # paste images together one by one
    y = 0
    for crop in crops:
        merged_image.paste(crop, (0, y))
        y += crop.height
    
    # resize merged_image if it exceeds the max height that Tesseract can process
    if total_height > 32767: # the max height of an image Tesseract can process
        new_height = 32767
        new_width = int((min_crop_width / total_height) * new_height)
        new_size = (new_width, new_height)
        merged_image = merged_image.resize(new_size)
    else:
        merged_image = merged_image
    
    observation_text = str(pytesseract.image_to_string(merged_image))
    row.append(observation_text)
    
    # append the finalized row to the running list of rows
    rows.append(row)
      
    # delete the cropped jpgs files from temp483images2
    for file in images2_folder.glob("*.jpg"):
        file.unlink()
        
    pdf.unlink()

driver.quit()

Create the final dataframe

In [7]:
# combine the end result of the PDF parsing for loop into a new pandas dataframe
headers = ['pdf_name', 'firm_name', 'establishment_type', 'facility_city', 'auditors', 'audit_dates', 'observations']
f483 = pd.DataFrame(rows, columns = headers)
print("Shape of the resulting Form 483 dataframe (rows, columns): ", f483.shape)

# merge the f483 df and the original reading room df into a final df, using the hyperlink as a key
reading_room = df2.merge(refs, how = 'left', on = 'pdf_url').merge(f483, how = 'left', on = 'pdf_name')
#reading_room.to_csv("data/FDA Reading Room Form 483 Dataset - Last Updated {}.csv".format(date.today().strftime("%Y%m%d")))
print("Shape of the final Reading Room dataframe (rows, columns): ", reading_room.shape)
Shape of the resulting Form 483 dataframe (rows, columns):  (70, 7)
Shape of the final Reading Room dataframe (rows, columns):  (70, 17)

Observation Topic Modeling

Machine Learning Unsplash

Now that the observation section of each Form 483 accessible through the FDA Reading Room has been parsed into text via Tesseract OCR, it is possible to perform topic modeling to meaningfully group each observation into related topics.

The first step of that process is to separate each value in the observations column (which contains all observations from that audit) into distinct rows, where each row is an individual observation.

Pre-process the observations

In [8]:
# separate each row into multiple rows based on the occurence of the substring OBSERVATION
rr = reading_room.assign(observations=reading_room['observations'].str.split(r'OBSERVATION [0-9]+\s+')).explode('observations').replace(r'(\n|\x0c)', ' ', regex = True)

# filter out the preamble rows (before OBSERVATION 1 starts)
rr1 = rr[~rr['observations'].str.contains("This document lists observations made by the FDA", na = False)]
print(rr1.shape)
rr1.head()
(343, 17)
Out[8]:
index record_date fei_number company_name record_type state establishment_type_x publish_date href pdf_url pdf_name firm_name establishment_type_y facility_city auditors audit_dates observations
0 2 2021-01-28 3011761321 Wells Pharmacy, Inc 483 Tennessee Outsourcing Facility 2021-03-31 /media/147184/download https://www.fda.gov/media/147184/download WellsPharmacy508ed_0 Wells Pharmacy, Ine CIty STATE ZIP CODE, C... 490 Us Highway ol Byp N TYPE ESTABLISHMENT... Wells Pharmacy, Ine CITY, STATE, ZIP CODE,... June P Page, Investigator Julius I Jones, Inve... JIN DATE(S) OF INSPEGTION 12/1/2020-1/28/2021+ There is a failure to thoroughly review the fa...
0 2 2021-01-28 3011761321 Wells Pharmacy, Inc 483 Tennessee Outsourcing Facility 2021-03-31 /media/147184/download https://www.fda.gov/media/147184/download WellsPharmacy508ed_0 Wells Pharmacy, Ine CIty STATE ZIP CODE, C... 490 Us Highway ol Byp N TYPE ESTABLISHMENT... Wells Pharmacy, Ine CITY, STATE, ZIP CODE,... June P Page, Investigator Julius I Jones, Inve... JIN DATE(S) OF INSPEGTION 12/1/2020-1/28/2021+ Buildings used in the manufacture, processing,...
0 2 2021-01-28 3011761321 Wells Pharmacy, Inc 483 Tennessee Outsourcing Facility 2021-03-31 /media/147184/download https://www.fda.gov/media/147184/download WellsPharmacy508ed_0 Wells Pharmacy, Ine CIty STATE ZIP CODE, C... 490 Us Highway ol Byp N TYPE ESTABLISHMENT... Wells Pharmacy, Ine CITY, STATE, ZIP CODE,... June P Page, Investigator Julius I Jones, Inve... JIN DATE(S) OF INSPEGTION 12/1/2020-1/28/2021+ for additional Quality Unit concerns.
0 2 2021-01-28 3011761321 Wells Pharmacy, Inc 483 Tennessee Outsourcing Facility 2021-03-31 /media/147184/download https://www.fda.gov/media/147184/download WellsPharmacy508ed_0 Wells Pharmacy, Ine CIty STATE ZIP CODE, C... 490 Us Highway ol Byp N TYPE ESTABLISHMENT... Wells Pharmacy, Ine CITY, STATE, ZIP CODE,... June P Page, Investigator Julius I Jones, Inve... JIN DATE(S) OF INSPEGTION 12/1/2020-1/28/2021+ Equipment and utensils are not maintained at a...
0 2 2021-01-28 3011761321 Wells Pharmacy, Inc 483 Tennessee Outsourcing Facility 2021-03-31 /media/147184/download https://www.fda.gov/media/147184/download WellsPharmacy508ed_0 Wells Pharmacy, Ine CIty STATE ZIP CODE, C... 490 Us Highway ol Byp N TYPE ESTABLISHMENT... Wells Pharmacy, Ine CITY, STATE, ZIP CODE,... June P Page, Investigator Julius I Jones, Inve... JIN DATE(S) OF INSPEGTION 12/1/2020-1/28/2021+ for additional Quality Unit concerns.

Next, the observations column can be separated out for further processing.

In [9]:
observations = rr1['observations'].tolist()
print("Number of observations: ", len(observations), "\nExample Observation:")
pprint(observations[5])
Number of observations:  343 
Example Observation:
('The quality control unit lacks responsibility to approve and reject all '
 'procedures or specifications impacting on the identity, strength, quality '
 'and purity of drug products.  *** THIS IS A REPEAT OBSERVATION FROM FDA 483 '
 'issued in 2018 (Observation 2)***  Specifically, during an interview with '
 'your firm’s Quality Assurance Supervisor, who is onsite daily, is '
 'responsible for, but not limited to: review and release of your firm’s batch '
 'records; routine monitoring reviews; and oversees your firm’s environmental '
 'monitoring program, stated they do not make quality decisions due to lack of '
 'experience or authority. For example, but not limited to:  A. On 12/07/2020, '
 'your firm’s Quality Assurance Supervisor stated they acknowledged the gaps '
 "in your firm's ISO 7-2 Packaging Room and ISO 7-1 Pellet Room ceilings and "
 'stated these gaps may cause disruption in the quality of air. However, the '
 'Quality Assurance Supervisor does not review your firm’s cleanroom '
 'certification reports and explained this review was conducted by the Quality '
 'Unit located in Ocala, Florida. Your firm’s Director of Operations stated '
 'the Vice President of Quality Assurance, located in Ocala, Florida, visits '
 'their facility approximately (b) (4) and the Senior Quality Assurance '
 'Manager, also located in Ocala, Florida visits approximately (b) (4) -  B. '
 'On 12/01/2020, we observed obvious surface abrasions located on the '
 "faceplate of your firm's pellet press, EQOO01, that comes in direct contact "
 'with drug components during processing for implantable hormonal pellets that '
 'are intended to be sterile. On 12/01/2020 and 12/07/2020, your firm’s '
 'Quality Assurance Supervisor, who routinely reviews and authorizes the '
 'release of batch records, stated your firm did not have any assurances '
 'currently in place that would ensure the implantable hormonal pellets '
 'produced on EQ001 and released to the public were not free of metal '
 'inclusions (e.g., no metal detection devices). However, your firm’s Quality '
 'Assurance Supervisor, stated they lack the authority to initiate an '
 'investigation (deviation) and defers to the Quality Unit located in Ocala, '
 'Florida for such determinations. On 12/10/2020, your firm’s Director of '
 'Operations provided a dispensing, report documenting at least 0  lots '
 '(approximately (b) (4) implantable hormonal pellets) within expiry were '
 "distributed to the public. As of 12/10/2020, your firm's Vice President of "
 'Quality Assurance (located in Ocala, Florida) stated they were “still '
 'determining whether or not this constitutes a deviation due to a surface '
 'abrasion”. Please refer to ')

With this list of observations, the words in each observation can be tokenized and converted into bigrams and trigrams where applicable.

In [10]:
def sent_to_words(sentences):
    for observation in observations:
        yield(gensim.utils.simple_preprocess(str(observation), deacc = True))

# tokenized words
obs_words = list(sent_to_words(observations))

# bigram
bigram = gensim.models.Phrases(obs_words, min_count = 5, threshold = 100)
bigram_mod = gensim.models.phrases.Phraser(bigram)

# trigram
trigram = gensim.models.Phrases(obs_words, min_count = 5, threshold = 100)
trigram_mod = gensim.models.phrases.Phraser(trigram)

From these lists of tokenized words with the observation list, stop words can be removed and bigrams can be formed. Stop words are a collection of words which impart no substantial meaning on the sentence. Therefore, they can be removed at this phase to avoid having them crop up as relevant terms during topic modeling. Each token (word or bigram) was then lemmatized, which is the process of removing inflectional endings from words to return it to the base form of the word (e.g. "drugs" --> "drug", "processes" --> "process").

In [11]:
lemmatizer = WordNetLemmatizer()

# modify list of stop words to fit this collection of documents
custom_stopwords = ['firm', 'within', 'example', 'specifically', 'following', 'mg', 'ml', 'stated', 'however']
chemical_stopwords = ['olive_oil', 'vancomycin', 'testosterone_cypionate', 'hcl', 'succinylcholine_chloride',
                      'sodium', 'alprostadil', 'lido_tetr', 'prilo_phenyl', 'betamethasone']
new_stop_words = custom_stopwords + chemical_stopwords
stop_words = stopwords.words('english')
for word in new_stop_words:
    if word in stop_words:
        continue
    else:
        stop_words.append(word)
        
# define functions for stopwords, bigrams, trigrams and lemmatization
def remove_stopwords(texts):
    return [[word for word in simple_preprocess(str(doc)) if word not in stop_words] for doc in texts]

def make_bigrams(texts):
    return [bigram_mod[doc] for doc in texts]

def make_trigrams(texts):
    return [trigram_mod[bigram_mod[doc]] for doc in texts]

def lemmatization(texts): #, allowed_postags=['NOUN', 'ADJ', 'VERB', 'ADV']):
    texts_out = []
    for sent in texts:
        texts_out.append([lemmatizer.lemmatize(token) for token in sent]) # if token.pos_ in allowed_postags])
    return texts_out

obs_words_nostops = remove_stopwords(obs_words)
obs_words_bigrams = make_bigrams(obs_words_nostops)
obs_lem = lemmatization(obs_words_bigrams)
print("Number of lemmatized observations: ", len(obs_lem))
Number of lemmatized observations:  343
In [12]:
# dictionary
id2word = corpora.Dictionary(obs_lem)

# corpus
texts = obs_lem

# Term Document Frequency
corpus = [id2word.doc2bow(text) for text in texts]

# human readable version of corpus
#pprint([[(id2word[id], freq) for id, freq in cp] for cp in corpus[:2]])

Determine key parameters for topic modeling

Topic modeling can now begin since the dictionary and corpus have been compiled from the list of observations! One of the key parameters the model needs is the number of topics to sort the observations into. This can be done by creating a variety of models and assigning each of them a performance score. In the world of topic modeling, this performance score is known as a coherence score. Simply put, the coherence score measures the relative distance between words within topics, and ranges from 0 (bad performance, no coherence) to 1 (amazing performance, perfect coherence). A coherence score greater than 0.8 is unlikely to occur, so the goal is often to find a model which yields a coherence score of between 0.45 and 0.7.

In [13]:
def compute_coherence_values(dictionary, corpus, texts, limit, start=2, step=3):
    """
    Compute c_v coherence for various number of topics

    Parameters:
    ----------
    dictionary : Gensim dictionary
    corpus : Gensim corpus
    texts : List of input texts
    limit : Max num of topics

    Returns:
    -------
    model_list : List of LDA topic models
    coherence_values : Coherence values corresponding to the LDA model with respective number of topics
    """
    coherence_values = []
    model_list = []
    for num_topics in range(start, limit, step):
        model = gensim.models.ldamodel.LdaModel(corpus = corpus, num_topics = num_topics, id2word = id2word,
                                               random_state = 1938, # year the Federal Food, Drug, and Cosmetic Act was signed
                                               passes = 25)
        model_list.append(model)
        coherencemodel = CoherenceModel(model=model, texts=texts, dictionary=dictionary, coherence='c_v')
        coherence_values.append(coherencemodel.get_coherence())

    return model_list, coherence_values
In [14]:
# Can take a long time to run!
start_point = 3
step_size = 3
steps_limit = 50
model_list, coherence_values = compute_coherence_values(dictionary=id2word, corpus=corpus, texts=obs_lem, start=start_point, limit=steps_limit, step=step_size)
In [15]:
x = range(start_point, steps_limit, step_size)
topic_dic = dict(zip(x, coherence_values))
max_topic_n = max(topic_dic.items(), key = operator.itemgetter(1))[0]
max_topic_score = max(topic_dic.values())
plt.figure(figsize=(10,5))
plt.plot(x, coherence_values)
plt.xlabel("Num Topics")
plt.ylabel("Coherence score")
plt.legend(("coherence_values"), loc='best')
plt.title("Highest coherence score of {} achieved with {} topics".format(round(max_topic_score, 2), max_topic_n))
plt.show()
In [16]:
# print calculated coherence scores
for m, cv in zip(x, coherence_values):
    print("When the number of topics is **", m, "**, the model has a Coherence Score of", round(cv, 4))
When the number of topics is ** 3 **, the model has a Coherence Score of 0.4301
When the number of topics is ** 6 **, the model has a Coherence Score of 0.4322
When the number of topics is ** 9 **, the model has a Coherence Score of 0.4609
When the number of topics is ** 12 **, the model has a Coherence Score of 0.4162
When the number of topics is ** 15 **, the model has a Coherence Score of 0.4002
When the number of topics is ** 18 **, the model has a Coherence Score of 0.4142
When the number of topics is ** 21 **, the model has a Coherence Score of 0.3658
When the number of topics is ** 24 **, the model has a Coherence Score of 0.4278
When the number of topics is ** 27 **, the model has a Coherence Score of 0.3888
When the number of topics is ** 30 **, the model has a Coherence Score of 0.4439
When the number of topics is ** 33 **, the model has a Coherence Score of 0.4149
When the number of topics is ** 36 **, the model has a Coherence Score of 0.4406
When the number of topics is ** 39 **, the model has a Coherence Score of 0.4357
When the number of topics is ** 42 **, the model has a Coherence Score of 0.4523
When the number of topics is ** 45 **, the model has a Coherence Score of 0.4191
When the number of topics is ** 48 **, the model has a Coherence Score of 0.4473

Train and evaluate the model

When selecting the number of topics with which to train the model, it is ideal to select a model which provides a high coherence score while also minimizing the number of topics. This way the topics can be distinct, but also not so subtle as to be indistinguishable to a human.

In [17]:
selected_topic_number = int(input("How many topics to train on?"))
lda_model = gensim.models.ldamodel.LdaModel(corpus = corpus,
                                           id2word = id2word,
                                           num_topics = selected_topic_number,
                                           # choose a random number to ensure the program learns the same way each time
                                           random_state = 1938, # year the Federal Food, Drug, and Cosmetic Act was signed
                                           passes = 25)

Let's evaluate the model we just built (already suspecting what the coherence score will be).

In [18]:
# Compute Perplexity
print('\nPerplexity: ', lda_model.log_perplexity(corpus))

# Compute Coherence Score
coherence_model_lda = CoherenceModel(model=lda_model, texts = obs_lem,
                                     dictionary = id2word, coherence = 'c_v')
coherence_lda = coherence_model_lda.get_coherence()
print('\nCoherence Score: ', coherence_lda)
Perplexity:  -7.2290584268231095

Coherence Score:  0.46093486772885506

View LDA Model Topics

The LDA Model can now be visualized to demonstrate the distribution of topics alongside which terms best represent that topic.

NOTE: The topic modelling process will not inform the user what the name of the topic is. It will simply inform the user which observations belong to the same topic.

In [19]:
# Visualize the topics
pyLDAvis.enable_notebook()
vis = pyLDAvis.gensim.prepare(lda_model, corpus, id2word)
vis
Out[19]:
In [20]:
# Print the Keywords in the 10 topics
pprint(lda_model.print_topics())
doc_lda = lda_model[corpus]
[(0,
  '0.018*"sample" + 0.018*"investigation" + 0.017*"cleaning" + 0.015*"batch" + '
  '0.014*"product" + 0.013*"result" + 0.013*"oos" + 0.010*"tablet" + '
  '0.010*"equipment" + 0.008*"initiated"'),
 (1,
  '0.028*"drug" + 0.027*"product" + 0.023*"non" + 0.015*"produced" + '
  '0.015*"sterile" + 0.014*"made" + 0.013*"used" + 0.013*"observed" + '
  '0.012*"hood" + 0.012*"lot"'),
 (2,
  '0.019*"sterile" + 0.015*"iso" + 0.013*"production" + 0.012*"product" + '
  '0.012*"used" + 0.011*"lot" + 0.011*"cleaning" + 0.010*"observed" + '
  '0.009*"drug" + 0.008*"area"'),
 (3,
  '0.036*"iso" + 0.034*"room" + 0.019*"area" + 0.016*"drug" + 0.014*"air" + '
  '0.013*"product" + 0.013*"sterile" + 0.011*"hood" + 0.011*"hazardous" + '
  '0.011*"classified"'),
 (4,
  '0.028*"sterile" + 0.019*"iso" + 0.014*"product" + 0.013*"technician" + '
  '0.012*"drug" + 0.011*"lot" + 0.009*"hood" + 0.009*"area" + 0.008*"sample" + '
  '0.008*"tn"'),
 (5,
  '0.020*"product" + 0.011*"review" + 0.011*"usp" + 0.011*"drug" + 0.008*"lot" '
  '+ 0.007*"observed" + 0.007*"sop" + 0.006*"vial" + 0.006*"batch" + '
  '0.006*"powder"'),
 (6,
  '0.016*"lot" + 0.014*"product" + 0.012*"vial" + 0.009*"observed" + '
  '0.008*"sterile" + 0.008*"report" + 0.007*"failure" + 0.007*"media_fill" + '
  '0.007*"batch" + 0.007*"failed"'),
 (7,
  '0.034*"drug" + 0.027*"product" + 0.014*"batch" + 0.014*"lot" + '
  '0.014*"quality" + 0.012*"investigation" + 0.009*"testing" + 0.008*"control" '
  '+ 0.008*"inspection" + 0.008*"specification"'),
 (8,
  '0.018*"product" + 0.017*"area" + 0.014*"injection" + 0.013*"drug" + '
  '0.013*"information" + 0.011*"iso" + 0.010*"observed" + 0.009*"label" + '
  '0.009*"room" + 0.009*"observation"')]

Assigning Observations to Topics

Since we have a list of topics which observations can be grouped in, it is now possible to assign each observation from the original dataframe to the topic it most strongly fits into. This will in turn allow us to compare the prevalence of each topic against the other topics, as well as evaluate if any of these topics are surging in popularity at any given time in the past two years.

In [21]:
# assign each citation to the most probable topic
topics = []
for line in obs_lem:
    t = [line]
    corpus2 = [id2word.doc2bow(w) for w in t]
    T_dis = list(lda_model[corpus2])[0]
    topics.append(max(T_dis))

# reformat the topics list for compatible df reshaping
s_topics = pd.Series(topics)

# join the prediced topics to the observations df
rr2 = rr1
rr2['topic_number'] = [n for (n,p) in s_topics.values]
rr2['topic_number'] = rr2['topic_number'].astype(str)
rr2['topic_probability'] = [p for (n,p) in s_topics.values]
C:\Users\ncruickshank\Anaconda3\envs\pyr\lib\site-packages\ipykernel_launcher.py:14: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  
C:\Users\ncruickshank\Anaconda3\envs\pyr\lib\site-packages\ipykernel_launcher.py:15: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  from ipykernel import kernelapp as app
C:\Users\ncruickshank\Anaconda3\envs\pyr\lib\site-packages\ipykernel_launcher.py:16: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  app.launch_new_instance()

Observation Topic Prominence

In [22]:
rr2_groups = rr2.groupby('topic_number').size().reset_index(name = 'count').sort_values(by = 'count', ascending = False)
fig = px.bar(rr2_groups, x = 'topic_number', y = 'count',
             title = "Prominence of obervation topics during FDA Audits from {} to {}".format(two_years_ago_formatted, today_formatted))
fig

Timeline of Observation Topic Popularity

In [23]:
rr2['month'] = pd.to_datetime(rr2['record_date']) + pd.offsets.MonthBegin(-1)
rr2_time = rr2.groupby(['topic_number', 'month']).size().reset_index(name = 'count').sort_values(by = 'month')
rr2_time['month'] = pd.to_datetime(rr2_time['month'])
fig = px.line(rr2_time, x = "month", y = "count", color = "topic_number",
              title = "Timeline of number observations made each month grouped by topic number")
fig
C:\Users\ncruickshank\Anaconda3\envs\pyr\lib\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning:


A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy

Top 3 Observations Per Topic

For each observation topic, which observations in the dataset have the highest probability of belonging to that topic?

In [24]:
for topic in range(0, selected_topic_number):
    print("\n===============================================================================\n")
    print("TOPIC NUMBER ", topic)
    print("\n===============================================================================\n")
    top_obs = rr2[rr2['topic_number'] == str(topic)].sort_values(by = 'topic_probability', ascending = False)[:3]
    for index, row in top_obs.iterrows():
        print("\nFirm Name: ", row['company_name'])
        print("Record Date: ", row['record_date'])
        print("Topic Probability: ", row['topic_probability'])
        print("Observation: \n")
        pprint(row['observations'])
        print("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -")
===============================================================================

TOPIC NUMBER  0

===============================================================================


===============================================================================

TOPIC NUMBER  1

===============================================================================


Firm Name:  Pharmaview Inc dba Far Hills Pharmacy
Record Date:  2019-11-14 00:00:00
Topic Probability:  0.9955310821533203
Observation: 

('ITY, STATE AND ZIP CODE 3edminster, NJ 07921-2605  TYPE OF ESTABLISHMENT '
 'INSPECTED Producer of Non-Sterile Drugs  HIS DOCUMENT LISTS OBSERVATIONS '
 'MADE BY THE FDA REPRESENTATIVE(S) DURING THE INSPECTION OF YOUR FACILITY. '
 'THEY ARE INSPECTIONAL IBSERVATIONS; AND DO NOT REPRESENT A FINAL AGENCY '
 'DETERMINATION REGARDING YOUR COMPLIANCE. IF YOU HAVE AN OBJECTION REGARDING '
 'AN IBSERVATION, OR HAVE IMPLEMENTED, OR PLAN TO IMPLEMENT CORRECTIVE ACTION '
 'IN RESPONSE TO AN OBSERVATION, YOU MAY DISCUSS THE IBJECTION OR ACTION WITH '
 'THE FDA REPRESENTATIVE(S) DURING THE INSPECTION OR SUBMIT THIS INFORMATION '
 'TO FDA AT THE ADDRESS ABOVE. IF ‘OU HAVE ANY QUESTIONS, PLEASE CONTACT FDA '
 'AT THE PHONE NUMBER AND ADDRESS ABOVE.  JURING AN INSPECTION OF YOUR FIRM '
 '(1) (WE) '
 'OBSERVED:                                                                                  '
 'JBSERVATION |  jazardous drugs were compounded without providing adequate '
 'containment or cleaning of multi-use equipment O prevent '
 'cross-contamination. .  specifically,  Juring the compounding operations '
 'observed on 10/29/2019 of Estradiol + Testosterone 0.01% + 0.01% in 30 g, ve '
 'notice that once the Estradiol was collected and weighed it was placed on '
 'the working surface next to other aw materials without proper containment. '
 'Your firm compounds the following hazardous drugs: Progesterone Micro USP '
 'Capsules, Biestrogen + Testosterone in Phyto Base, Estradiol + Estriol + '
 'Progesterone in HRT, and {stradiol + Progesterone Capsules. In addition, '
 'there is a lack of cleaning with an adequate deactivating agent to nsure '
 'that residue of hazardous drugs is absent from multi-use equipment such '
 'as(b) (4) (b) (4)  b) (4) and plastic syringe.  IBSERVATION 2 '
 'Non-Pharmaceutical grade components are use in the formulation of '
 'non-sterile drug products. specifically,  a. Non-pharmaceutical grade '
 'component (b) (4) was observed on the shelf. This component was used in the '
 'formulation of the following non-sterile drug products:  alam Iat 193N071D) '
 'nraduced an Inlw 30 9N10 405 Main St TYPE OF ESTABLISHMENT INSPECTED  ~ '
 'Riectrnaen + Tectnactarnne in Phuta Race 19 +1 9 harmaview Inc (DOB: Far '
 'Hills Pharmacy) TY, STATE AND ZIP CODE edminster, NJ 07921-2605     Producer '
 'of Non-Sterile Drugs     - Testosterone in Phyto Base 4mg/ml, lot 190306D, '
 'produced on June 03, 2019.  b. There is no assurance that the (b) (4) used '
 'as a component in the formulation of non-sterile drug products, complies as '
 'pharmaceutical grade (b) (4) . Examples of products produced with this (6) '
 '(4) as a component are:  - Pyridoxine Suspension 50mg/ml, lot 193007F, '
 'produced on July 30, 2019 - Minoxidil 5% Scalp Solution 30ml, lot 192708G, '
 'produced on August 27, 2019. - Aminophyllin in HRT 10% 100mg/g, lot 192709A, '
 'produced on September 27, 2019.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  Professional Pharmacy Services Inc dba Good Day Pharmacy
Record Date:  2019-06-17 00:00:00
Topic Probability:  0.9952446222305298
Observation: 

('You produced highly potent drugs without providing adequate containment, '
 'segregation, cleaning of work surfaces and cleaning of utensils to prevent '
 'cross-contamination.  Specifically,  Equipment, work surfaces, and utensils '
 'are used for the production of hormonal products as well as non-hormonal '
 'products. Inadequate cross-contamination precautions are established to '
 'protect drug products produced on these shared surfaces at the Good Day '
 'Longmont location as well as the Good Day Fort Collins location. You have '
 'failed to demonstrate that the use of the dish washer and manual cleaning '
 'operations (soap and water) are adequate to mitigate cross-contamination of '
 'products made on site. Non-dedicated equipment, utensils, and work surfaces '
 'include the(b) (4) ‘hood, compounding counter adjacent to the hood, glass '
 'stirrers, metal spatulas, glass mortar and pestle, mesh sieves, (b) (4) '
 'capsule machines, unguator and mixing blades, ointment mill, troche mold, '
 'stir bars, and beakers.  a. On 6/4/2019 you made the following hormone '
 'containing prescription products and non-hormone containing prescription '
 'products with mixed use equipment, utensils, and workstations:  Testosterone '
 '10mg Mini Troche Rx (b) (6) roches  Progesterone 100mg IR Capsule Rx (b) '
 '(6).) -apsules . BIEST (50:50) 0.1mg/gm(b)\\ (4) 01.me/em cream Rx (6)i(6).) '
 '@ Progesterone 75mg SR #1 75mg Capsule Rx (6)/(6). © @-apsules  Enrof '
 '20mg/Prednisolone eae Oral Suspension Rx (b) (6). (b) (4) Prazosin 0.5mg '
 'Capsule Rx (b) (6), b) (4)  Ranitidine 30mg/mL Glycerin Oral Suspension Rx '
 '(6)\\(6) (B) (4)  Clonidine 0.1mg/mL Oral Suspension Rx(b) (6) (b) (4)  b. '
 'On 6/7/2019 you made the following hormone containing products and '
 'non-hormone containing products with mixed use equipment, utensils, and '
 'workstations (b) (4) (B) (4) hood and compounding counter adjacent to the '
 'hood):  Estradiol Smg/gm Cream Rx (b) (6) (b) (4)  Estradiol 15mg/gm Cream '
 'Rx(b) (6). (®) (4)  ag ES bg Pregnenolone 65mg/ Progesterone 200mg/ '
 'Testosterone 0.65mg Sugar Free Troche Rx (6) (6) © @)roches  Testosterone '
 '16% (160mg/gm) Cream Rx (b) (6) () (4)  Gabapentin 50mg #3 Capsule Rx (6) '
 '(6). capsules _  Omeprazole 2mg/ml Oral Suspension Rx (6) (6), (D) (4)  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  Blount Discount Pharmacy, Inc.
Record Date:  2020-02-13 00:00:00
Topic Probability:  0.9939913749694824
Observation: 

('Y, STATE AND ZIP CODE coa. TN 37701  TYPE OF ESTABLISHMENT INSPECTED '
 'Non-sterile Drug Product Producer     S DOCUMENT LISTS OBSERVATIONS MADE BY '
 'THE FDA REPRESENTATIVE(S) DURING THE INSPECTION OF YOUR FACILITY. THEY ARE '
 'INSPECTIONAL SERVATIONS; AND DO NOT REPRESENT A FINAL AGENCY DETERMINATION '
 'REGARDING YOUR COMPLIANCE. IF YOU HAVE AN OBJECTION REGARDING AN SERVATION, '
 'OR HAVE IMPLEMENTED, OR PLAN TO MPLEMENT CORRECTIVE ACTION IN RESPONSE TO AN '
 'OBSERVATION, YOU MAY DISCUSS THE JECTION OR ACTION WITH THE FDA '
 'REPRESENTATIVE(S) DURING THE INSPECTION OR SUBMIT THIS INFORMATION TO FDA AT '
 'THE ADDRESS ABOVE. IF U HAVE ANY QUESTIONS, PLEASE CONTACT FDA AT THE PHONE '
 'NUMBER AND ADDRESS ABOVE.  RING AN INSPECTION OF YOUR FIRM (I) (WE) '
 'OBSERVED:  bservation #1 wzardous and highly potent drugs are produced '
 'without providing adequate cleaning of work surfaces, utensils, uipment '
 'and/or personnel to prevent cross-contamination.  cifically, I observed '
 'built-up residue on the scale, stained and nicked spatulas, scratched and '
 'cloudy glassware ed to produce non-sterile drug products. You use these same '
 'utensils and equipment to manufacture hazardous ugs and non-hazardous types '
 'of drugs including but not limited to hormone, Fluorouracil, and opioid '
 'products.  bservation #2 yents used for cleaning the laminar flow hood and '
 'other equipment between products do not include a activating agent (e.g. '
 'oxidizing agent) to prevent cross-contamination.  cifically, the cleaning '
 'agents I observed used between batches for equipment and the hood were | | '
 'and dish soap only.     bservation #3 n-pharmaceutical grade components are '
 'used in the formulation of non-sterile drug products.     ecifically, you '
 'use Sodium Hyaluronate, a as components in hormone creams, cough up and '
 'suspensions. You do not have adequate documentation to demonstrate these '
 'components meet suitability ‘use in non-sterile drug products.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

===============================================================================

TOPIC NUMBER  2

===============================================================================


Firm Name:  ImClone Systems, L.L .C. 
Record Date:  2019-11-26 00:00:00
Topic Probability:  0.9971312284469604
Observation: 

('Appropriate controls are not exercised over computers or related production '
 'systems.  Specifically, electronic data obtained from manufacturing process '
 'or related equipment are not appropriately controlled. For example,  A. We '
 'observed from the audit trails of the(b) (4) units that electronic files '
 'identified as Calibration Study, Qualification Study and Verification Study '
 'have been deleted. These §) (4) (b) (4) | , units are used for the equipment '
 'qualifications, involving (b) (4) — i processes. The deleted incidents and '
 'related audit trail were not reviewed by the quality unit. For example, the '
 'following are some of the actions observed in the audit trai] obtained from '
 'the(b) (4)  ) units.  3 |-Jan-2018 Qualification Study : (b) ) (4) d '
 '‘deleted by at 15:57:48 User ID (6) (6)”. User Name: (b) 6)  01-Feb-2018 '
 'Qualification Study :(b) (4) deleted by at 09:22:17 User ID : (b) (6). User '
 'Name: (6))(4)  Branchburg, NJ 08876-3904 Biological Drug Substance '
 'Manufacturer        05-Feb-2018 | Verification Study : (B)(4) =” deleted by '
 'at 14:15:14 User ID : (6) (6). User Name: (6)(6)  05-Feb-2018 Calibration '
 'Study :(b) (4) _” deleted by at 14:17:03 User ID : (6){4)". User Name: '
 '(b)(@)  05-Feb-2018 Calibration Study : “(b) (4) deleted by at 14:17:19 User '
 'ID : (b)(4)”. User Name: (b) (4)  05-Feb-2018 Verification Study : (6) 4) '
 'deleted at 14:17:38 by User ID: ont User Name (b) (4)  05-Feb-2018 | '
 'Verification Study : Jy (D)(4) deleted by  at 14:18:05 User ID : “(by {4y. '
 'User (b) (4)  05-Feb-2018 Qualification Study : “(b) (4) i  at 14:20:22 '
 'deleted by User ID : (6)(6)”. User Name: (b) (6)  22-Feb-2018 Qualification '
 'Study : (b) (4) _  at 07:06:39 deleted by User ID : (6) (6). User Name: (b) '
 '(6)  23-Mar-2018 | Qualification Study : (B)4)NN deleted at 09:01:04 by User '
 'ID : (B) (6) User Name: (6) (6)  13-Apr-2018 Qualification Study : “(B)(4) '
 'at 09:57:49 deleted by User ID : (6)(6)". User Name: (b) (6)              '
 'Branchburg, NJ 08876-3904 | Biological Drug Substance '
 'Manufacturer                  16-Aug-2018 | Qualification Study :{b) (4) '
 '—_—_ deleted by at 13:49:53 User ID : (b) (6). User Name: (6) (6)  '
 "05-Feb-2018 Verification Study: (6) (4) ' deleted by at 14:15:14 User ID: "
 '(6) ©)”. User Name (b) (6)  05-Feb-2018 Calibration Study: (6) (6) _ deleted '
 'by at 14:17:03 User ID: (B)(6). User Name (b) (6)  05-Feb-2018 Calibration '
 'Study: (6) (4) deleted by at 14:17:19 User ID: (6)(6)”. User Name: (b) (6)  '
 '05-Feb-2018 | Verification Study: (b) (4) deleted by  at 14:17:38 User ID: '
 '(6) (6)) User Name: (6) @)  05-Feb-2018 Verification Study: (6) (4) deleted '
 'by at 14:18:05 User ID: (6) (6). User Name: ()(6)  05-Feb-2018 Qualification '
 'Study: (6)(4)_ at 14:19:51 deleted by User ID: (6)(6) User Name: (b) (6)  '
 '13-Apr-2018 Qualification Study: “(b) (4)  at 09:57:49 deleted by User ID: '
 '(6)(6). User Name:                          * Full name withheld, and only '
 'initials shown      Branchburg, NJ 08876-3904 Biological Drug Substance '
 'Manufacturer     B. Review of the (b) (4) _unit’s (Serial No(b) (4) _) audit '
 'trail also indicated users had logged into the system on multiple occasions '
 'to do Audit Trail operations followed by adjusting the system clock. For '
 'example, the following table shows three sequential actions recorded in the '
 'audit trail: :  38- Sep-2018 User Td: OG) TPE in to ane,  at 10:50:13  '
 '28-Sep-2018 User Id : (6) (6) . User Name: "* logged i in  at 11:03:47 to do '
 '“AuditTrail” operation in (b) (4 ee screen  28-Sep-2018 (6) (4) Clock '
 'adjusted from  at 10:48:59 28/09/2018 11:03:47 to 28/09/2018 10:49:00 by '
 'User Id : (6) (6), User Name:(6) ©)                    * Full name withheld, '
 'and only initials shown  Similar actions were observed in (b) (4) > units, '
 '(6) (4) sand (B) (4) as well. The firm’s quality unit did not review the '
 'audit trails from these (b) (4) = =————suunits. Operators were assigned '
 'administrative privileges. In addition, the firm does not have sufficient '
 'controls ta prevent the deletion of electronic data stored in these systems, '
 'which is not backed-up on a periodic  basis.  C. We observed that test runs '
 'have been aborted from(b) (4) — _ Test Instruments and the aborted tests '
 'were not logged in the user logs, documented or reviewed. For example, '
 'review of the run history on the(b) (4) Test Instruments (ID: (6)(4) ) '
 'indicated an error     message “Test aborted by the operator” on multiple '
 'occasions. However, these events were not  Branchburg, NJ 08876-3904 '
 'Biological Drug Substance Manufacturer  documented in the user logs and '
 'reviewed by the quality unit. We were unable to ascertain why the operators '
 'had aborted the runs. These (6) (4) | Test Instruments are used to conduct '
 '(b) (4)) and (b) (4) _ testing of (6) (4) , that are used in the '
 'manufacturing processes of biological drug substances such as Cetuximab, '
 'Ramucirumab, Necitumumab and Galcanezumab, which are utilized in the '
 'production of drug products that are distributed in the U.S. '
 'market.              ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  Edge Pharma, LLC
Record Date:  2020-03-30 00:00:00
Topic Probability:  0.9946402907371521
Observation: 

('Routine calibration and checking of automatic, mechanical and electronic '
 'equipment is not performed according to a written program designed to assure '
 'proper performance.  Specifically, the firm has not adequately qualified all '
 'equipment as capable of performing its intended functions or operations '
 'before first use and your firm does not perform routine maintenance for all '
 'equipment. For example:  A. Your firm has not adequately qualified all '
 'critical equipment used to produce, test, and store sterile drug products to '
 'include: (B) (4) . temperature control chambers (incubators). and '
 'refrigerators. For example, the firm’s initial qualification of refrigerator '
 'Model (b) (4) (ID# NS-FRIG- 022) was inadequate. The firm failed to conduct '
 'an installation qualification (IQ) or operational qualification (OQ) (i.e. '
 'empty chamber mapping). The firm’s performance qualification (PQ) only '
 'consisted of an(b) (4) chamber mapping. The PQ failed to include open door '
 'and recovery testing, power-loss simulation or alarms testing. The '
 'aforementioned refrigeration unit is located within the QC Laboratory and is '
 'utilized for the storage of samples awaiting QC analysis and for the storage '
 'of stability samples.  B. The firm uses a(b) (4) water system to generate '
 'water which is subsequently (b) (4) into plastic buckets and used for '
 'dilution of disinfecting agents used in ISO-7 and ISO-8 classified spaces; '
 'however, there is no assurance the water used for the dilution of '
 'disinfecting agents and used for cleaning of ceilings, walls, and floors is '
 'appropriate for use. For example: the fe (4) (b) (4) water system has not '
 'been qualified and the firm does not perform(b) (4 of (b) (4) (6) (4)used on '
 'the water system. In addition, on 3/6/20, the(b) (4) (Lot  (b) (4)) used '
 'every (b) (4) for sanitizing and disinfecting the system were observed '
 'expired (expiry date of 11/05/2018), and the (Bb) (4) _ located on the water '
 'hold tank was observed as expired. Further, plastic buckets used to transpor '
 '(fb) (4) water to classified spaces are(b) (4) with non-  sterile™™ and '
 'filled in a non-classified environment.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  Edge Pharma, LLC
Record Date:  2020-03-30 00:00:00
Topic Probability:  0.9946087598800659
Observation: 

('Procedures designed to prevent microbiological contamination of drug '
 'products purporting to be sterile are not established and followed.  '
 'Specifically,  A. The firm failed to follow standard operating procedure '
 '(SOP), S-CMP-012, Aseptic Technique, which states "cleanroom technicians '
 'must move slowly, deliberately and avoid excess or unnecessary movements '
 'while working within classified areas". For example, on 3/4/20 through '
 '3/6/20, firm personnel were observed to qove rapidly within the ISO-7 Clean '
 'Room 202, immediately adjacent to the open ISO-5_ LFHs during sterile '
 'compounding. In addition, (SOP), S-CMP-012, Aseptic Technique, fails to '
 'address personnel controls to prevent unnecessary activities that could '
 'increase the potential for introducing contaminants into ISO-5 environments. '
 'For example, on 3/9/20, firm personnel operating within ISO- | LFHs were '
 'observed to place their forearms and elbows on the deck of the ISO-5|_ '
 'LFHs.  B. The firm’s production & operations staff failed to follow '
 'procedure, P#.2.1.1 — Deproygenating Reusable Devices and Glassware, to '
 'store depyrogenated, aluminum sealed glassware and reusable devices in an '
 'ISO class 8, or better, environment. During the current inspection, aluminum '
 'sealed glassware to include 20L beakers used during sterile drug production '
 'was found stored on a cart in a non-classified environment.  C. The firm has '
 'not performed an assessment to determine if non-sterile hand sanitizer is '
 'adequate to be used during sterile gowning. For example, the firm utilizes '
 'non-sterile (b) (4) (b) (4) ) on non-sterile gloved hands during the gowning '
 'process to enter the ISO-7 Clean Room 202 prior to the final step of putting '
 'on sterile gloves. During the inspection, employees were observed touching '
 'their sterile garments after utilizing the non-sterile hand sanitizer.  '
 'Deficiencies regarding prevention of microbiological contamination of drug '
 'products were also noted during the 2014 and 2018 FDA inspections  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

===============================================================================

TOPIC NUMBER  3

===============================================================================


Firm Name:  Hawaii Health Systems Corporation dba Kona Community Hospital Pharmacy
Record Date:  2019-12-13 00:00:00
Topic Probability:  0.9967184066772461
Observation: 

('Your facility design allowed the influx of poor quality air into a higher '
 'classified area.  Specifically, the air balance between rooms is not '
 'controlled to ensure cascading flow of air between areas of lesser '
 'classifications. For example:  COLT (°C) | area does not seal completely '
 'when the doors on either side of (b) (4) j The ISO 7 Hazardous Drug Room is '
 'maintained at a negative pressure relative to adjacent spaces, allowing air '
 'from the unclassified area to continuously enter the room. The differential '
 'pressure between the ISO 7 Hazardous Drug Room and the unclassified office '
 'area is not monitored. Additionally, during the transfer of finished sterile '
 'hazardous drugs, we observed (b) (4) open at the same time. The ISO 7  '
 'Hazardous Drug Room contains the ISO 5 Biosafety Cabinet, which is used in '
 'the production of sterile hazardous drug products, including but not limited '
 'to Leucovorin, Oxaliplatin, Fluorouracil, Gemcitabine, and Cisplatin.  b.) '
 'The air pressure differential between the ISO 8 Ante Room and the '
 'unclassified office area has been below the specified range of (b) (4) '
 'inches water column (” w.c.) on 39 of the 44 days between 10/09/19 and '
 '12/05/19 for which data was recorded. Of the 39 instances, the pressure '
 'differential was measured as negative once on 11/13/19 at -0.003” w.c. '
 'allowing air from the ISO 8 Ante Room into the ISO 7 Non-Hazardous Drug '
 'Room. The ISO 8 Ante Room is used by operators performing production '
 'operations to don sterile garbing materials prior to entering one of the ISO '
 '7 areas and the Ante Room is also used for storage of materials used for '
 'production operations.  c.) The air pressure differential between the ISO 7 '
 'Non-Hazardous Drug Room and the ISO 8 Ante Room has been below and above the '
 'specified range of (b) (4) _” w.c. on 8 of the 44 days between 10/09/19 and '
 '12/05/19 for which data was recorded. The ISO 7 Non-Hazardous Drug Room '
 'contains the ISO 5 Laminar Airflow Hood, which is used in the production of '
 'sterile non-hazardous drug products, including but not limited to '
 'Vancomycin, Phenylephrine, Penicillin, Ceftriaxone, and Fentanyl.  d.) The '
 'air pressure differential between the ISO 7 Hazardous Drug Room and the ISO '
 '7 Non-Hazardous Drug Room has been below the specified range of negative (b) '
 '(4) ” w.c. on 38 of the 44 days between 10/09/19 and 12/05/19 for which data '
 'was recorded.  e.) During the cleanroom certification performed on 12/11/18, '
 'the following air pressure differentials were out of specification: between '
 'the ISO 8 Ante Room and unclassified office area was measured at 0.138” w.c. '
 'using a calibrated instrument while the firm’s wall gauge reading was 0.108” '
 'w.c., and between the ISO 7 Non- Hazardous Drug Room and ISO 8 Ante Room was '
 'measured at 0.00556” w.c. using a calibrated instrument while the firm’s '
 'wall gauge reading was 0.044. The subsequent and most recent certification '
 'performed on 06/05/19 also had air pressure differentials out of '
 'specification: between the ISO 8 Ante Room and unclassified office area was '
 'measured at 0.145” w.c. (-0.132” w.c. wall gauge), between the ISO 7 Non- '
 'Hazardous Room and the ISO 8 Ante Room was measured at 0.00573” w.c. (0.01” '
 'w.c. wall gauge), and between the ISO 7 Hazardous Drug Room and ISO 7 '
 'Non-Hazardous Drug Room was measured at -0.0719” w.c. (-0.084” w.c.). The '
 'wall gauges used for daily readings have never been calibrated.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  Roger Williams Medical Center
Record Date:  2019-08-14 00:00:00
Topic Probability:  0.9959396719932556
Observation: 

('Your facility design allowed the influx of poor quality air into a higher '
 'classified area.  Specifically,  A. There is an|(®))/@) the unclassified '
 'pharmacy area and the ISO 7 classified Clean Room |\\*)) <5) the  '
 'unclassified pharmacy area and the ISO 7 classified Chemo Room. Components '
 'used in production are|(®)) G5 (b) (4) were observed to be cluttered with '
 'papers, supplies and equipment. You do not have information or data to '
 'provide assurance that the unclassified air from the pharmacy area is not '
 'entering the ISO 7 classified Clean Room and Chemo Room  though the|(s))@5 '
 'during production.  B. You do not monitor the pressure differential between '
 'the ISO 7 Ante Room and the ISO 7 Chemo Room. On 07/22/2019, it was observed '
 'that the differential pressure gauge between the two rooms was not operating '
 'properly, and the needle on the pressure gauge was resting on the     pin '
 'below the pressure gauge’s minimum scale reading of 0.0 inches of water  . '
 'You have also been documenting a reading of -0.01 inches of water as the '
 'pressure reading between the ISO 7 Chemo Room and ISO 7 Ante Room on your '
 '(5/5) “Temperature, Humidity, and Pressure Log,” which is a reading below '
 'the capability of your differential pressure gauge. The documented pressure '
 'reading does not indicate the actual daily pressure differential between the '
 'ISO 7 Ante Room and the ISO 7 Chemo Room. Instead, - 0.01 inches of water '
 'pressure is documented, which was the differential pressure between the two '
 'rooms when the pressure between the rooms was last balanced approximately '
 'one year ago.  C. You failed to appropriately monitor the pressure '
 'differential between the ISO 7 Clean Room and the ISO 7 Chemo Room. You '
 'document 0.01 inches of water as the pressure reading between the ISO 7 '
 'Clean Room and ISO 7 Chemo Room on youl() Ca} “Temperature, Humidity, and '
 'Pressure Log,” when there is no pressure differential gauge installed '
 'between the ISO 7 Clean Room and the ISO 7 Chemo Room. You document a 0.01 '
 'inches of water pressure reading, which was the differential pressure '
 'between the two rooms when the pressure between the rooms was last balanced '
 'approximately one year ago.  D. On 08/05/2019, the pharmacy replaced the '
 'pressure differential gauge between the ISO 7 Ante Room and the ISO 7 Chemo '
 'Room. On 08/05/2019, it was observed that the pressure gauge between the two '
 'rooms indicated an Ante Room pressure of 0.025 inches of water      was '
 'opened, the needle on the pressure gauge was resting on the pin below the '
 'pressure gauge’s minimum scale reading of 0.0 inches of water pressure. The '
 'minimum acceptance criteria for the pressure differential between the two '
 'rooms are        is lost  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  Hawaii Health Systems Corporation dba Kona Community Hospital Pharmacy
Record Date:  2019-12-13 00:00:00
Topic Probability:  0.9957447648048401
Observation: 

('Your facility was designed and/or operated in a way that permits poor flow '
 'of personnel and materials.  Specifically, the design of the cleanrooms was '
 'deficient in the following ways:  a.) Smoke studies performed in the ISO 5 '
 'Biological Safety Cabinet used to produce sterile hazardous drug products '
 'were not conducted under dynamic conditions to show unidirectional airflow '
 'during routine production operations.  b.) HEPA filtered air supply vents '
 'and air returns are all located on the ceilings of the ISO 7 Hazardous Drug '
 'Room, ISO 7 Non-Hazardous Drug Room, and ISO 8 Ante Room. The metal air '
 'vents are not designed to provide unidirectional air to the rooms with air '
 'dispersing in two to four different directions from each vent. The firm has '
 'not evaluated the air patterns in each room.  c.) The ISO 7 Hazardous Drug '
 'Room, ISO 7 Non-Hazardous Drug Room, and ISO 8 Ante Room share  air handling '
 'units ((b) (4) ) and a common final HEPA filter with the unclassified office '
 'area of the pharmacy. There are no HEPA filters located directly at the air '
 'supply vents to each ISO- classified room.  d.) Operators entering the ISO 7 '
 'Hazardous Drug Room must first enter the ISO 8 Ante Room to perform initial '
 'gowning and pass through the ISO 7 Non-Hazardous Drug Room to enter the ISO '
 '7 Hazardous Drug Room, where additional gowning and gloves are donned. On '
 '12/03/19, we observed the operator go back and forth between the ISO 7 '
 'Hazardous Drug Room and ISO 8 Ante Room on at least two occasions to obtain '
 'more supplies needed for production and cleaning. Upon exiting the ISO 7 '
 'Hazardous Drug Room, the secondary gowning was removed and redonned upon '
 'reentry; however, there are no restrictions of products being made in both '
 'rooms simultaneously and there has been no evaluation of the air patterns '
 'created by the movement between rooms.  e.) Room light fixtures located in '
 'the ISO 7 Hazardous Drug Room, ISO 7 Non-Hazardous Drug Room, and ISO 8 Ante '
 'Room protrude from the ceiling and are not completely sealed around the '
 'edges. Gaps of approximately 1/8" in width were observed along the length of '
 'each side of the various light fixtures in each room.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

===============================================================================

TOPIC NUMBER  4

===============================================================================


Firm Name:  Edge Pharma, LLC
Record Date:  2020-03-30 00:00:00
Topic Probability:  0.997157871723175
Observation: 

('Aseptic processing areas are deficient regarding the system for monitoring '
 'environmental conditions.  Specifically, the firm’s environmental monitoring '
 'practices of classified and aseptic processing areas do not ensure '
 'appropriate levels of environmental cleanliness. For example:  A. The firm '
 'failed to conduct investigations of environmental excursions to include '
 'microbial species identification and perform corrective and preventive '
 'actions following identification of objectionable microbes recovered from '
 'classified environments such as additional sporicidal cleanings. For '
 'example, on 9/25/2019, the firm recovered airborne mold from two locations '
 'in ISO-8 room 300 (the firm’s (B) (4) ) and airborne mold from 3 locations '
 'in ISO-7 room 302 (the firm’s (b) (4)  ); however, the firm failed to '
 'initiate an EEI, only performed microbial species identification for 2 of '
 'the 5 mold recoveries (Talaromyces wortmannii and Irpex lacteus, both '
 'filamentous fungi), and failed to perform corrective actions such as '
 'additional sporicidal cleanings.  B. Objectionable microorganisms such as '
 'mold and fungus are not identified to species level. For example, from '
 '9/1/18 to 3/11/20 a total of 294 environmental monitoring sample recoveries '
 'from classified environments were phenotypically identified as mold or '
 'fungus and documented by the firm’s staff; however, only 270 of these '
 'recoveries were microbially identified to species level.  C. Not all ISO-5 '
 'microbial recoveries are identified and investigated. The firm does not '
 'perform microbial species identification on all recoveries found on '
 'operator’s sleeves unless the recovery is CFUs. Operator’s sleeves were '
 'observed to routinely enter ISO-5 environments during the inspection. From '
 '4/1/19 to 12/31/19, the firm failed to conduct investigations including '
 'microbial species identification on 73 microbial recoveries from operator’s '
 'sleeves and it is unknown if these recoveries represent objectionable '
 'organisms such as spore formers.  D. The firm’s environmental monitoring '
 'practices of the il (b) (4)iaminar flow hoods” @ FH) located in the firm’s '
 'ISO-7 Clean Room 202 are not supported by scientific justification for '
 'sampling locations. For example, the stainless-steel decks of the LFHs ((b) '
 '(4) in dimension) are perforated with approximately (b) (4) diameter holes '
 'except for an approximate (B) (4)-wide non-perforated strip of '
 'stainless-steel surface located in the center of the deck. The firm was '
 'observed to perform surface sampling of the perforated portion of the VLFH '
 'deck instead of the uniform portion of the deck, therefore not allowing for '
 'complete contact of sample media to the deck surface.  E. The firm lacks '
 'scientific rationale for environmental monitoring alert and action levels. '
 'For example, the firm’s ISO-7 surface sampling alert level is ™@ CFUs and '
 'action level is” CFUs, and the firm’s ISO-7 viable air alert level is ’CFUs '
 'and action level is” CFUs. In addition, the firm does not perform EEIs to '
 'include microbial species identification (firm personnel morphologically '
 'identify mold and or fungus) and corrective actions for ISO-7 microbial '
 'recoveries unless the recovery is ()4) CFUs for surface sampling o1!®) @) '
 'CFUs for viable air sampling. It is unknown if these recoveries represent '
 'objectionable organisms.  F. The firm’s personnel monitoring practices are — '
 'For example, on 3/6/20, two technicians were observed to spray their hands '
 'witht )) (4) approximately 90 seconds prior to performing gloved fingertip '
 'monitoring, and on 3/11/20 a technician was observed spraying  their hands '
 'with immediately before fingertip personnel monitoring.  G. The firm’s '
 'environmental monitoring personnel procedures and sampling methods are '
 'inadequate and do not ensure recovery of microbes. For example, firm '
 'procedure, S-QMR-008 — Personnel Monitoring, states “() (4) . — -  On '
 '3/6/2020 during a pump to syringe media fill a technician was observed to '
 'quickly and lightly tap their fingertips on the agar surface while '
 'performing gloved fingertip monitoring instead of (b) (4) with adequate '
 'pressure to ensure recovery of potential microbes.  Environmental monitoring '
 'deficiencies were also noted during the 2014 and 2018 FDA inspections.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  Hawaii Health Systems Corporation dba Kona Community Hospital Pharmacy
Record Date:  2019-12-13 00:00:00
Topic Probability:  0.9971029162406921
Observation: 

('You did not make adequate product evaluation and take remedial action where '
 'actionable microbial contamination was found to be present in an area '
 'adjacent to the ISO 5 classified aseptic processing area during aseptic '
 'production.  Specifically, actionable microbial contamination was discovered '
 'inside (Db) (4) rooms, where the ISO 5 Biological Safety Cabinet (BSC) and '
 'ISO 5 Laminar Airflow (LAF) Hood are located, during (B) (4) cleanroom '
 'certifications and periodic settling plate samples and no evaluation of '
 'product impact was made. For example:  a.) During the 12/11/18 (b) (4) '
 'recertification, the ISO 7 Non-Hazardous Drug Room Viable Air Sample, ID (®) '
 '(4) had a calculated 44 colony forming units (cfu) /m? identified as '
 'Coagulase-negative Staphylococcus species, Dermabacter hominis, and '
 'Micrococcus luteus, and the ISO 7 Hazardous Drug Room Viable Air Sample, ID '
 '(b) (4) had a calculated 18 cfu/m? identified as Bacillus species, '
 'Micrococcus luteus, Micrococcus species, and Staphylococcus haemolyticus. '
 'The firm did not evaluate any products filled in the ISO 5 LAF Hood and ISO '
 '5 BSC on 12/11/18 for product impact, including but not limited to: Morphine '
 'Img/mL SOmL, Vancomycin 750mg, Vancomycin 1000mg, Vancomycin 1250mg, '
 'Vancomycin 1500mg, Acyclovir 600mg, Ertapenem 500mg, Ceftriaxone 473mg, '
 'Azithromycin 94.6mg, Ampicillin 473mg, Vasopressin 40 units, and Azacitidine '
 '150mg.  On the 01/24/19 retest from the December recertification, the ISO 7 '
 'Non-Hazardous Drug Room Viable Air Sample, ID (6) (4) had a calculated 27 '
 'cfw/m? identified as C orynebacterium minutissimum, Corynebacterium species, '
 'Micrococcus species, and Staphylococcus haemolyticus. The firm did not '
 'evaluate any products filled in the ISO 5 LAF Hood on 01/24/19 for product '
 'impact, including but not limited to: Octreocide 50mcg, Octreocide 500mcg, '
 'Pantoprazole 80mg, Clindamycin 61.16lmg, Vancomycin 1000mg, Vancomycin '
 '1250mg, Ampicillin 80mg, and Gentamicin 7.2mg.  c.) On 01/29/19, a settling '
 'plate located (b) (4) in the ISO 7 Non-Hazardous Drug Room had one colony of '
 'mold, which was not identified. The firm did not evaluate any products '
 'filled in the ISO 5 LAF Hood on 01/29/19 for product impact, which include: '
 'Hydromorphone 0.2mg/mL, Midazolam Img/mL, Fentanyl 550mcg/S55mL, Vancomycin '
 '750mg, Vancomycin 1250mg. Vancomycin 2000mg. and Ferric Carboxymaltose '
 '750mg.  On 03/27/19, a settling plate located (b) (4) of the ISO 7 Hazardous '
 'Drug Room had 2 cfu that were not identified. The firm did not evaluate any '
 'products filled in the ISO 5 BSC on 03/27/19  b.  —  d.  —  for product '
 'impact, which include: Nivolumab 480mg, Pertuzumab 420mg, Trastuzumab 450mg, '
 'Obinutuzumab 1000mg, Bendamustine 125mg. Leucovorin 564mg, Oxaliplatin '
 '120mg, Fluorouracil 564mg, Fluorouracil 3384mg, Irinotecan 212mg. and '
 'Carfilzomib 60mg.  e.) On 05/28/19, a settling plate located (b) (4) 7 in '
 'the ISO 7 Non-Hazardous Drug Room had one colony of yeast that was not '
 'identified. The firm did not evaluate any products filled in the ISO 5 LAF '
 'Hood on 05/28/19 for product impact, which include: Penicillin G 2.5 million '
 'Units/Saline 1000mL, Gentamicin 340mg, and Vancomycin 1250mg.  f.) During '
 'the 06/05/19 (b) (4) __ recertification, the ISO 7 Hazardous Drug Room '
 'Viable Air sample, ID (b) (4). had a calculated 56 cfu/m? identified as '
 'Coagulase-negative Staphylococcus species, Corynebacterium minutissimum, '
 'Corynebacterium tuberculostearicum, Corynebacterium-like bacteria, '
 'gram-positive cocci, Micrococcus luteus, and Micrococcus species, and the '
 'ISO 7 Hazardous Drug Room Surface Sample, ID (b) (4) had a calculated 9 cfu '
 'on the plate identified as Cellumonas species, Coagulase-negative '
 'Staphylococcus species, gram-positive rod, Micrococcus luteus, and '
 'Staphylococcus saprophyticus. The firm did not evaluate any products filled '
 'in the ISO 5 BSC on 06/05/19 for product impact, which include: Magnesium '
 'Sulfate 6g/Saline 162mL, Vancomycin 750mg, Vancomycin 1000mg, Vancomycin '
 '1250mg. Vancomycin 1500mg. Ampicillin/Sulbactam 3000mg. Potassium Phosphate '
 '15mmol, Acyclovir 715mg. Nivolumab 240mg, Nivolumab 480mg, Leucovorin 600mg, '
 'Leucovorin 664mg, Oxaliplatin 130mg. Oxaliplatin 141mg, Fluorouracil 600mg, '
 'Fluorouracil 664mg, Fluorouracil 3700mg, Bevacizumab 585mg, and '
 'Pembrolizumab 200mg.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  Advanced Nutriceuticals, LLC
Record Date:  2020-10-29 00:00:00
Topic Probability:  0.9954625964164734
Observation: 

('Your employees touched equipment and other surface areas outside the ISO 5 '
 'area with gloved hands and proceeded to aseptically process drug product '
 'without changing or sanitizing gloves.  Specifically,  On 10/14/2020 and '
 '10/16/2020, we observed your sterile technician perform aseptic techniques '
 'in the ISO 5 Cleanroom hood. Your sterile technician’s practice of '
 'sanitizing sterile gloved hands and changing of gloves in between contacting '
 'non-sterile and sterile materials is inadequate. For example:  A) On '
 '10/16/2020 while aseptically processing Selank 1000MCG/ML 5 ML, LOT '
 '1016202002 EXP 11/16/2020 from non-sterile to sterile in the ISO 5 Cleanroom '
 'hood:  1. We observed your sterile technician touch or retrieve items '
 'outside the ISO 5 Cleanroom hood a total of fourteen (14) times. These '
 'include touching the staging cart handle bar, retrieving vials from a '
 'non-sterile (4) bag outside the ISO 5 area, and retrieving a syringe outside '
 'the ISO 5 area. In between retrieving items from outside of the ISO 5 area, '
 'we observed your employee sanitize their gloved hands only once.  2. We '
 'observed your sterile technician adjusted their face mask in between aseptic '
 '(b) (4) with gloved hands in the ISO 5 Cleanroom hood. This employee did not '
 'sanitize their gloved hands after touching the face mask.  3. We observed '
 'your sterile technician’s gloved hands were visually contaminated and wet '
 'with drug product while attaching a (b) (4) to a syringe which contained '
 'product. After the gloves were contaminated, your sterile technician did not '
 'don a new pair of gloves and only sanitized this contaminated glove with '
 'sterile before proceeding to aseptically (MAY Selank LOT 1016202002 EXP '
 '11/16/2020 from non-sterile to sterile in the ISO 5 Cleanroom hood.  B) On '
 '10/14/2020, we observed your sterile technician grabbing the trash bin '
 'located outside the ISO 5 area with their gloved hands. Your sterile '
 'technician neither donned a new pair of sterile gloves nor sanitized their '
 'gloved hands before returning to admix a Myer’s Cocktail IV bag in the ISO '
 '5  Cleanroom hood. Your sterile technician added the 1 but not limited to '
 'Ascorbic Acid LOT         EXP 11/20/2020, Potassium Phosphate LOT EXP '
 '11/10/2020, Glutathione LOT EXP 11/18/2020, and B Complex LOT EXP 11/28/2020 '
 'into an IV bag in the Cleanroom hood on 10/14/2020.      ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

===============================================================================

TOPIC NUMBER  5

===============================================================================


Firm Name:  Novel Laboratories, Inc. d.b.a LUPIN
Record Date:  2020-11-05 00:00:00
Topic Probability:  0.9971585273742676
Observation: 

('Laboratory controls do not include the establishment of scientifically sound '
 'and appropriate test procedures designed to assure that drug products '
 'conform to appropriate standards of identity, strength, quality and purity.  '
 'Specifically,  A. There are no procedures to ensure that the Karl Fischer '
 '(KF) Moisture Analyzer operates as intended and can accurately assess water '
 'content for release testing of the Raw Materials and Finished Products. The '
 'firm’s SOP NL-QC-039.15 “OPERATION AND CALIBRATION OF THE KARL FISCHER '
 'AUTO-TITRATOR AND POTENTIOMETRIC AUTO-TITRATOR” Effective Date 06/09/2020 '
 'does not require analysis of a standard that is close to the sample results '
 'for an accuracy check. Instead, the firm uses water to conduct the accuracy '
 'check with an acceptance specification of However, the QC water content '
 'specification for numerous samples is smaller than the range of error for '
 'the water accuracy check. In addition, the firm currently only performs '
 'accuracy at of the during the calibration of instrument. The intended used '
 'is between therefore, the accuracy needs to be performed at different (b) '
 '(4) during the instrument calibration for accuracy of the:       The water '
 'content specifications for following API, Raw Materials, and Finish '
 'Products:           Product Water Content Specification Potassium Chloride '
 'for Oral Solution, USP NMT PEG-3350, Sodium Sulfate, Sodium Chloride, NMT  '
 'Potassium Chloride, Sodium Ascorbate and Ascorbic Acid for Oral Solution '
 '(Generic                 )@) > Polyethylene Glycol for Oral Solution '
 '(GaviLax) NM’ Quinapril HCL NMT     Somerset, NJ 08873-1145 [| Drug Product '
 'Manufacturer        NMT nazole, USP NM’ PEG-3350 '
 'NMT.                                   B. Your written procedure for '
 'calibration of pH meters SOP NL-QC-035.8 “OPERATION, CALIBRATION AND '
 'STANDARDIZATION OF pH METERS” Effective Date 03/04/2020, which is used to '
 'measure pH in the preparation of mobile phases and diluents, Raw Material '
 'release testing, in-process testing, and Finished Product release testing of '
 'drug products, is deficient in that:  1. pH probe thermometers are not '
 'calibrated as part of the calibration procedure nor are they verified at '
 'time of use to ensure that they are reading the correct temperature when the '
 'pH is taken. As a result, there is no assurance that the pH readings, which '
 'are temperature dependent and automatically adjusted by the instrument, are '
 'accurate.  2. During calibration of the pH probe, which is done at least '
 '(BJ{@J, the temperature and offset are not monitored or recorded.  C. Your '
 'written procedure for calibration of HPLC SOP NL-QC-031.16 “OPERATION AND '
 'CALIBRATION OF HIGH PERFORMANCE LIQUID CHROMATOGRAPHS” Effective Date '
 '02/21/2020, which is used to perform analyses for Assay,  Dissolution, and '
 'Related Compound of Raw Materials, In-Process, Finish Product, and '
 'Stability  Samples, is deficient in that the ow calibration only checks the '
 'air temperature of the in one location (exact location not noted in '
 'calibration document). There is no     Somerset, NJ 08873-1145 Drug Product '
 'Manufacturer        assurance that the (EE is able to maintain SITS across '
 'the (ey) vial locations within the instrument. The test methods for the '
 'following products require a specific temperature for the sample solution '
 'prior to injection:     Method # (6) (4) Title Temperature '
 'RM-I16561-LC-HCOOH | - Method of Analysis for (B49)        RM-116561-LC-HCHO '
 '~ Method of Analysis for (N40     FP-834269-LC-RC FP-060-DEG  Azithromycin '
 'Tablets, USP- and| for Oral Solution, USP        FP-358-LC-AS Hydrocodone '
 'Bitartrate and Acetaminophen Tablets, USP —     FP-358-LC-RC Hydrocodone '
 'Bitartrate and Acetaminophen Tablets, USP —        FP-123-AS-02              '
 'i LLL OL  FP-123-DEG-00     Temazepam Capsules, Temazepam Capsules, USP — ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  Novel Laboratories, Inc. d.b.a LUPIN
Record Date:  2020-11-05 00:00:00
Topic Probability:  0.9970352649688721
Observation: 

('Written procedures are not followed for evaluations done at least (S)(@YM '
 'and including provisions for a review of complaints, recalls, returned or '
 'salvaged drug products, and investigations conducted for each drug product.  '
 'Specifically, control procedure for Annual Product Review (SOP No. '
 'NL-QA-042.7, Version: 7, Effective Date: 4/26/2018) is not followed to '
 'evaluate the products at least annually.  Somerset, NJ 08873-1145 [ Drug '
 'Product Manufacturer     The review cycle for each drug product (based on '
 'approval of the ANDA) is defined in Annual Product Review SOP. As per this '
 'SOP the annual product review report should be completed after (BRAVE of the '
 'review cycle. On 9/30/2020, significant deficiencies pertaining to timely '
 'completion of annual product review reports were observed as '
 'below:                    7 Total products for | # of products with # of '
 'products with review Review Cycle 7 ? é review delayed review still pending '
 '20 Gi) 18 @§%) 39) 20 i) 36 @%) 0 @%)                 As of 9/30/202, the '
 'Quality Unit failed to complete the annual review for about fff products for '
 'more than  (B® as below:                                            a Number '
 'of Produc Nome come | Magee | eee | See PP Delayed Potassium Chloride ER '
 'Tablets 10 SHANG NS mEqK and (Sa 01/20/2019 09/29/2020* a 12/8/2017 to '
 'Phenelzine Tablets, 15mg Denote 05/29/2019 Hydrocodone Bitartrate and '
 'Homatropine Methylbromide an eg Pending Tablets, Smg and 1.5mg Review '
 'Tinidazole Tablets, USP 250 mg & | 4/30/2018 to Pending 500 mg_ 4/29/2019 '
 'Review Methylergonovine Tablets, USP 0.2 | 5/2/2018 to Pending L mg 3/1/2019 '
 'Review Temazepam Capsules, USP 15 mg, | 4/21/2018 to 7.5mg, 22.5 mg, 30mg '
 '4/20/2019 09/11/2020*        EEE EERE EEEEeeeee ees                    '
 '06/15/2018 Pending to 6/14/2019 Review 06/19/2018 Orphenadrine ER Tablets, '
 '100mg to Pending 06/18/2019 Review : 05/27/2018 Gavitye to 5/26/2019 '
 '09/09/2020*  Somerset, NJ 08873-1145 | Drug Product Manufacturer a 6/1/2018 '
 'to Saibpes 5/31/2019 09/12/2020* a 6/01/2018 to Seabee 5/31/2019 09/11/2020* '
 'Doxycycline capsules, 50, 75, and | 5/28/2018 to Pending 100mg 5/27/2019 '
 'Review Voriconazole for Oral 5/31/2018 to  Trimethoprim Tablets, '
 '100mg           Zolpidem Tartrate Sublingual 6/3/2018 to Pending Tablets, '
 '1.75 & 3.5 mg 6/2/2019 Review Suspension,40mg/SmL 5/30/2019 09/09/2020*  '
 '07/07/2018  si * Flucytosine Capsules 250 mg and oa Pending  aoe: 07/06/2019 '
 'Review Oxycodone HCI Oral Solution, 4/29/2018 to 20mg/ml 4/28/2019 '
 '07/17/2020 Misoprostol Tablets, 100 mcg & 200 | 7/25/2018 to Pending meg. '
 '7/24/2019 Review Nystatin Topical Powder, 100,000 | 7/23/2018 to Units/g, '
 '7/22/2019 09/29/2020* Pentazocine and Naloxone HCl T/N//2018 to Tablets, '
 '50/0.5 mg CIV 7/10/2019 09/09/2020* *Review completed during inspection or '
 'after inspection announced                                            '
 'Specifically,  Your written procedure for laboratory analyst training SOP '
 'NL-QC-002.3 “TRAINING OF LABORATORY PERSONNEL” Effective Date 08/11/2014 '
 'does not contain a standard training procedure in place for the laboratory '
 'analysts for consistent On-the-Job (OJT) training to assure that all '
 'analysts receive similar training. Instead, the SOP states that “Assessment '
 'of instrument skills based on past experience” and “Extent of Hands-on eee '
 'necessary will be determined on the basis o:  (LT ac OJTs for a new employee '
 'with previous experiences are skipped. During review of training records for '
 '{MJ analysts, no OJT records were available. Instead, a Memo was provided '
 'for one of the analysts stating that “practical training” had been given on '
 'various instruments: Karl Fischer, UV-Vis, Dissolution, HPLC, GC, Density '
 'Meter, and Viscometer however, no records of “practical training” were '
 'documented and the SOP does not explain what “practical training” consists '
 'of.     *DATES OF INSPECTION  09/10/2020(Thu), 09/1 1/2020(Fri), '
 '09/14/2020(Mon), 09/15/2020(Tue), 09/16/2020( Wed), 09/17/2020(Thu), '
 '09/18/2020(Fri), 09/24/2020(Thu), 09/25/2020(Fri), 09/28/2020(Mon), '
 '09/29/2020(Tue), 09/30/2020(Wed), 10/01/2020(Thu), 10/06/2020(Tue), '
 '10/07/2020( Wed), 10/08/2020(Thu), 10/20/2020(Tue), 10/21/2020(Wed),  '
 'Somerset, NJ 08873-1145 l Drug Product Manufacturer a ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  Fusion IV Pharmaceuticals, Inc. dba Axia Pharmaceuticals
Record Date:  2019-12-20 00:00:00
Topic Probability:  0.9967412948608398
Observation: 

('Laboratory controls do not include the establishment of scientifically sound '
 'and appropriate test procedures designed to assure that conform to '
 'appropriate standards of identity, strength, quality and purity.  '
 'Specifically,  A. Growth Promotion testing of the OI used in the Aseptic '
 'Process Simulations are challenged with only two organisms; Bacillus '
 'subtilis and Candida Albicans. The testing of only two  organisms does not '
 'demonstrate the media can support growth of a wide range of microorganisms. '
 'Your firm is not following the Policy on Aseptic Process Simulations as '
 'stated in SOP 4.72 section 8.4.8 which states the selection of 5 '
 'microorganisms.  B. Your firm has not performed an antimicrobial '
 'effectiveness study to verify that the preservative system is effective and '
 'protects the product over its shelf life under expected conditions of use. '
 'For example, the following drug stock solutions have a shelf life of six '
 'months and contain a preservative. You have not verified through '
 'antimicrobial effectiveness studies the content of the preservative. In '
 'addition, stability studies have not been provided to show the drug product '
 'is stable in its container.  Papaverine HCL; lot 10142019+53116, discard '
 'after April 11, 2020 Phentolamine Mesylate; lot 10142019+53114, discard '
 'after April 11, 2020  This is a repeat objectionable observation from the '
 'March 2017 FDA inspection.  Your firm’s manual visual inspection is '
 'inadequate and does not ensure your drug product is contamination free prior '
 'to distribution.  1. I observed on 12/5/2019 in the cleanroom suite (ISO 7), '
 'aseptic fill technician performing visual inspections at a metal table on '
 'finished drugs vial without assistance from light magnification or '
 'contrasting white background. I observed the fill technician hold the vial '
 'O@9yyyand shake the vial MY hen label the vials. The fill technician '
 'conducted visual inspection and labeling on the following drug lots:  '
 'Alprostadil 150 meg/ml lot 12042019+53331 Papaverine HCL/Phentolamine '
 'mesylate 60mg/40mg/ml lot 12042019+53329  Alprostadil/Papaverme '
 'HCL/Phentolamine mesylate/Atropine 18mcg/1.8mg/0.2mg/0.2mg/ml _ lot '
 '12042019+53327  Alprostadil/Papaverme HCL/Phentolamine mesylate/Atropme '
 '40mcg/25mg/0.5mg/0.lmg/ml _ lot 12042019+53325  Alprostadil/Papaverine '
 'HCL/Phentolamine mesylate/Atropine 60mcg/30mg/2mg/0.15mg/ml lot '
 '12042019+53323.  2. On 12/5/2019 in the visual inspection room, I observed '
 'an employee maneuver Triamcinolone Acetonide (Preservative Free) 2 ml vials '
 'lot 12032019+53303 onto the table for labeling and inadvertently drop a vial '
 'on the concrete floor. He picked up the vial held it up for approximately '
 'one second to the light asked the process engineer if it was ok. The process '
 'engineer nodded and the  employee placed it back on the table for labeling. '
 'There was no additional examination of the integrity of the glass vial. This '
 'visual inspection practice does not adhere to your firm’s SOP 2.87, titled, '
 '‘Visual Inspection of Finished Drug Products” section 8.5.2 that “if the '
 'inspector is uncertain about a potential defect, the unit should be '
 'segregated and evaluated more thoroughly by another qualified inspector '
 'and/or a Quality Unit representative...”  3. Prior to the fo ll visual '
 'inspection of Triamcinolone Acetonide (Preservative Free) 2 ml vials lot '
 '12032019+53303, your firm failed to measure the intensity of the light '
 'source using a calibrated  on the visual inspection machine. SOP 2.87, '
 'titled, ‘Visual Inspection of Finished Drug Products” section 8.4 requires '
 'the measurement to be recorded in the batch production record; however, '
 'there is no allotted space in the batch record to record this measurement.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

===============================================================================

TOPIC NUMBER  6

===============================================================================


Firm Name:  Fusion IV Pharmaceuticals, Inc. dba Axia Pharmaceuticals
Record Date:  2019-12-20 00:00:00
Topic Probability:  0.9982351660728455
Observation: 

('Procedures designed to prevent microbiological contamination of drug '
 'products purporting to be sterile are not followed.  Specifically, A.  '
 'Observed on 12/3/2019, during the aseptic processing of Methylpredinsolone '
 'Acetate batch 12022019+53297, technician dispensed from the ie | bag onto '
 'the table top of the laminar flow workstation and use each vial (Theoretical '
 'yield ™™ unit vials). Your firm is not followmg your standard operating '
 'procedure document number 4.71 titled, “Aseptic Processing Requirements and '
 'Technique” which reads in section 7.1.10, “Compounding personnel shall not '
 'use a gloved hand to touch any product contact surfaces, but should use '
 'appropriately sterilized utensils (e.g., forceps), as needed.”        B.  '
 'Observed on 12/11/2019 in the ISO 5 aseptic filling room, aseptic filling '
 'operator performed Pee interventions during the ‘it filling of Glutathione '
 'batch 12102019+53365 without routinely sanitizing hands. I observed the '
 'operator open the cabinet door of the filling machine (ISO 5) and perform '
 'interventions at least nissan stopping and starting the machine, dispensing '
 'components in the hopper, manipulate capped vials inside the filling machine '
 'for approximately a ae period. Your firm is not following your standard '
 'operating procedure document number 4.71 tiled, “Aseptic  Processing '
 'Requirements and Technique” which reads in section 7.1.11, “Compounding '
 'personnel shall change sterile gloves on a frequent basis or disinfect them '
 'routinely with OI during prolonged compounding manipulations.”  C.  You did '
 'not perform investigations into the root cause of media fill sterility '
 'failures for media fill runs performed in ISO 5 Laminar Flow Workstations '
 '(LAFWs) from Pe. Turbidity was observed in the solutions. You failed to '
 'investigate the root cause for the following media fill failures prior to '
 'producing and distributing sterile products. See four examples found below:  '
 '1  Run cil (ail syringe); Summary report PO) RPT notes the following fill '
 'runs passed:  Resa                   However, the “Summary of Validation '
 'Discrepancies” reads “there was a failure noted”. Media fill number @ 5 is '
 'noted as failed. Your firm failed to investigate the failure per your SOP '
 '4.80, titled, “Validation Protocol for Aseptic Process Simulations”. It '
 'reads in section 9.1.1.1., “Any positive units, deviations, or discrepancies '
 'must be investigated and shown to have no impact on the validation. In '
 'addition, your firm could not provide the batch production record for this '
 'failed trial run  a:  Run Type sail Onl vial); Summary report Ln RPT notes '
 'the following media fill runs passed:               The “Summary of '
 'Validation Discrepancies” reads “there was a failure noted”. The summary '
 'report does not list the failure. However, it was found media fill run me] '
 'PRD contained the failure. The batch production record for media fill run '
 'PO) POW reads the media solution was aseptically The solution “turned turbid '
 'after 2 and was not filled into the vials”. Media fill run was replaced with '
 'media fill     Your firm failed to investigate the failure per your SOP '
 '4.80, titled, “Validation Protocol for Aseptic Process Simulations”. It '
 'reads in section 9.1.1.1., “Any positive units, deviations, or discrepancies '
 'must be investigated and shown to have no impact on the validation.  3. Run '
 'Typ validation 2@ 7) filling machine Aseptic Processing Simulation (al '
 'vial); Summary report RPT notes the following fill runs passed:      The '
 '“Summary of Validation Discrepancies” reads “there was a failure noted”. The '
 'summary report does not list the failure. Your firm failed to investigate '
 'the failure per your SOP 4.80, titled, “Validation Protocol for Aseptic '
 'Process Simulations”. It reads in section 9.1.1.1., “Any positive units, '
 'deviations, or discrepancies must be investigated and shown to have no '
 'impact on the validation.  4. Run Typ mo vial); Summary report = | RPT notes '
 'the following media fill runs  passed:  The “Summary of Validation '
 'Discrepancies” reads “there was a failure noted”. The summary report does '
 'not list the failure. However, it was found media fill run ) contained the '
 'failure. The batch production record for media fill run eee 3) reads “AP has '
 'been  cancelled due to turbidity of solution after approximately in room '
 'temperature.” Media fill run was replaced with media '
 'fill                     Your firm failed to investigate the failure per '
 'your SOP 4.80, titled, “Validation Protocol for Aseptic Process '
 'Simulations”. It reads in section 9.1.1.1., “Any positive units, deviations, '
 'or discrepancies must be investigated and shown to have no impact on the '
 'validation.  Failure to perform investigations into the root cause of media '
 'fill sterility failures for media fill runs is a repeat objectionable '
 'observation listed on the FDA 483 inspection dated March 2017.  D.  All '
 'media vials from the Aseptic Process Simulation are not being incubated. For '
 'example; the Aseptic  Processing simulations for th ial filler Report ID# '
 'details Run POW lot  number III yielded a) ] vials; however onl were '
 'incubated.  Run lot numbe ielded Pe only PA vials were incubated. Ruy lot '
 'number ielded vials only? vials incubated. Justification provided  in the '
 'batch record stated it was due to “space constraints”. Therefore, your firm '
 'selected every 20) vial  to be incubated.            EB.  Your firm is not '
 'following SOP 3.40 Cleaning and Disinfection in Sterile Compounding Areas, '
 'version 4 section 4.3. Quality Unit is responsible for reviewing '
 'documentation of the cleaning of the contracted cleaning personnel '
 'performing the cleaning of the cleanroom suites and laminar flow '
 'workstations. There is no review by signature on they cleaning logs '
 'completed by the cleaning contractor for the months of October and November '
 '2019. There is no Check By signature on the an  cleaning logs completed by '
 'the cleaning contractor for the months of October and November 2019.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  Hospira Inc
Record Date:  2020-01-17 00:00:00
Topic Probability:  0.9973527193069458
Observation: 

('Written records of investigations into unexplained discrepancies do not '
 'always include the conclusions and follow-up.  Specifically,  A. On August '
 '21, 2019, an NDA Field- Alert Report McPfar# 2019-043 was initiated for the '
 'recovery of 2 species of mold (Cladsporium species and Sarocladium '
 'terricola) equaling 62 cfu from the multi-product aseptic filling lin ®)@ '
 'Grade A zone where lyophilized product is transferred to the lyophilizer '
 'trayer. Furthermore, 6 cfu of bacterial colonies (Brachybacterium rhamnosum) '
 'were recovered from the Grade A zone from the same settle plate. In '
 'addition, on August 16, 2019, a recovery of 2 cfu of mold colonies '
 '(Aspergillus species) were isolated from the personnel/material Grade B (b) '
 '(4) Grade A/B aseptic area.  The mold and bacteria recoveries were '
 'identified in the Grade A aseptic zone where lyophilized and sterile '
 'solutions are produced. The firm has failed to identify product associated '
 'within the filed NDA Field- Alert. However, according to PR#4138900, there '
 'wer (6) (4) lots manufactured during the time of the event and (6) (4) lots '
 'were released into market. Excursions were due to a missed cleaning and room '
 'pressure excursions.  B. On 12/02/2018, an NDA Field-Alert Report McPfar# '
 '2019-150 was initiated for the recovery of 2 species of mold (Tritirachium '
 'oryae and Asperigillus sydowii) equaling 14 cfu from the multi- product '
 'aseptic filling lin ()()Grade A zone where the aseptic solution connection '
 'is performed. Investigation PR# 2514531 determined that there was no impact '
 'to Plazomicin Lot# 951003F and released the batch. Root causes and '
 'corrective actions are not robust to mitigate risk and re-  occurrence.  C. '
 'On 08/06/2019, an ANDA Field-Alert Report McPfar #2019-037 was initiated for '
 'the recovery of 1 cfu of mold growth found on a viable passive air site in '
 'the Grade A(6)(4) isolator on July 26, 2019. Investigation PR#4097952 '
 'rejected Glatiramer Acetate Injection 20 mg/mL, Lot 070653F. However, the '
 'investigation failed to implement an effective CAPA to control contamination '
 'within the aseptic isolator barrier Grade A zone.  D. Investigation PR# '
 '4146395 failed to adequately address the air reversal excursions affecting '
 'Grade A/B (b) (4) (room 338A) from the Grade D area supporting the asepti ©) '
 'filling line. The room air pressure increases when Grade D room doors are '
 'open at the same time as the Grade B doors leading to the asepti ®) filling '
 'area. Corrective actions implemented did not mitigate future occurrences  E. '
 'On 12/22/2018, Field Alert McPfar 2018-169 was initiated for 23 cfu of mold '
 'contamination detected inside a HEPA car (b) (4), used to transport aseptic '
 'product from th © filling line. The field alert did not indicate that '
 'Vancomycin Hydrochloride for Injection, Lot 96170DD was implicated and later '
 'rejected as a batch disposition. Furthermore, the the Field Alert and CAPA '
 'PR#2543245, failed to evaluate the (Db) (4)sanitation process of the HEPA '
 'carts from the dates of closure, June 2019, to address the interim process '
 'that will be used to mitigate risk. HEPA Carts are still being (b) (4) '
 'sanitized to be reintroduced back into the clean rooms.  F. On 01/23/2019, '
 'Field Alert Report McPfar 2019-006 was initiated in response to '
 'investigation PR#4322158 initiated for lcfu for a Class 1, Grade A personnel '
 'that was working in the Grade A zone o © filling line. The investigation '
 'identifies the cause of the mold species being due to gowning. However, the '
 'firm has failed to implement appropriate corrective actions that prevent '
 'mold excursions identified on Class 1 employee working inside a Grade A '
 'zone. All product batches associated with this personnel excursion were '
 'released for distribution.  G. The firm has not initiated an overall '
 'effective corrective action plan to mitigate the re-occurrence of bacterial '
 'and/or mold colonies isolated from points throughout the aseptic '
 'manufacturing suites and supporting areas. Since the last inspection in '
 'August 2018, the firm continues to recover bacterial and/or mold isolates '
 'from critical zones Grade A and B, supporting areas, and Class 1 '
 'personnel.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  Legacy Pharmaceutical Packaging LLC
Record Date:  2020-01-16 00:00:00
Topic Probability:  0.9959757924079895
Observation: 

('A process whose results cannot be fully verified by subsequent inspection '
 'and test has not been adequately validated according to established '
 'procedures.  Specifically, the following was noted from review of the Final '
 'Report for Performance Qualification for  | Packaging (b) (4), dated on or '
 'about 12/23/19:  A. The process control verification protocol (QP '
 '19-416,-417 and -418, part 8.0) documents the Vision System Challenge tests '
 'for incorrect/illegible carton part code and /or UDI barcode on the carton '
 'label was a critical quality classification. The final report-(part 4.0) '
 'reads.as follows:  “*** Ail PQ tests of the *** Vision System with *** '
 'camera arid critical quality attribute checks were performed, verified and '
 'demonstrated to meet all acceptance criteria***”.  i. However, the vision '
 'system atin as described in part 9 of the (b) (4) packaging instructions '
 '(Document Number MBR-0602, revision 01), does not include using a challenge '
 'carton with either an incorrect carton part code or incorrect UDI barcode. '
 'The packaging project manager stated the optical character recognition (OCR) '
 'capability of the vision system was never tested (challenged) to detect and '
 'reject incorrect part codes or incorrect UDI bar codes during any of the (b) '
 '(4) performance qualification (PQ) lots. .  ii. | He said the vision system '
 'was challenged: for missing / illegible codes, only. The challenge devices '
 'for missing / illegible codes were not a controlled/standardized set of test '
 'articles used for all performance qualification (PQ) lot tests. The test '
 'articles were  (b) (4) to each challenge S saul lot (b) (4) vision '
 'challenges were performed per lot).  B. The final report (part 5.0) reads-as '
 'follows: “There were no exceptions initiated during the — execution of the '
 'PQ protocols”. However Sane occurred and were not included in the  final PQ '
 'evaluation: i. | Maintenance was required to adjust the vision system during '
 '(b) (4) production lot number (b) (4). The engineering technician said he '
 'adjusted®  on the vision system because the-system was rejecting too many '
 'packages. This maintenance activity was not documented or evaluated as a '
 'process exception in the final report.  ii. | Vision system labeling rejects '
 'was a statéed critical quality attribute check for the performance '
 'qualification, however the number of labeling rejects (nonconformances) '
 'detected were not recorded or evaluated as process exceptions in the final '
 'report.  iii. | The packaging project manager stated rejected/mislabeled '
 'cartons were reworked during (b) (4) of the production lots: However, the '
 'amount of rework was not recorded or included the final report as a process '
 'exceptions.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

===============================================================================

TOPIC NUMBER  7

===============================================================================


Firm Name:  SCA Pharmaceuticals
Record Date:  2019-11-19 00:00:00
Topic Probability:  0.9985273480415344
Observation: 

('There is a failure to thoroughly review any unexplained discrepancy and the '
 'failure of a batch or any of its components to meet any of its '
 'specifications whether or not the batch has been already distributed.  '
 'Specifically, The firm failed to adequately investigate the following:  A. '
 'There have been seven confirmed failures for in-house sterility testing of '
 'finished sterile drug products since October 2018 using a(b) (4) method for '
 'detection of fluorescence in individual microorganisms ((b) (4) ). All '
 'associated batches (1218003930, 1219007440, 1219008117, 1219008696, '
 '1219009160, 1219009289, & 1219012541) were rejected; however, the '
 'investigations did not take into account the identity of the contaminating '
 'microorganism(s) to determine its source. For example:  e '
 'Out-of-Specification Laboratory Investigation Report OOS 18-087-W was '
 'initiated on 10/15/2018 for the sterility test failure of Buffered Lidocaine '
 '1% in Sodium Bicarbonate 8.4% (b) (4) Syringe lot number 1218003930. The '
 'potential root cause(s) was determined to be human error; however, the '
 'investigation did not identify the contaminating microorganism(s). The '
 'investigation was approved by Quality Assurance 12/10/2018.  e '
 'Out-of-Specification Laboratory Investigation Report OOS 19-049-W was '
 'initiated on 03/22/2019 for the sterility test failure of Buffered Lidocaine '
 '1% in Sodium Bicarbonate 8.4% (b) (4) Syringe lot number 1219007440. A '
 'definitive root  cause had not been determined but the Deviation '
 'Investigation (DV-19-312-W) indicated the possible root cause was human '
 'error; however, the investigation did not identify the contaminating '
 'microorganism(s). The investigation was approved by Quality Assurance on '
 '06/17/2019.  e Out-of-Specification Laboratory Investigation Report OOS '
 '19-055-W was initiated on 04/18/2019 for the sels test failure of Ob) ( hone '
 'HC] 0.2mg/mL in 0.9% Sodium Chloride( b) (4 \\b) (4) ) (4) lot number '
 '1219008117. The potential root cause | in eee Investigation (DV-19- 385-W) '
 'was human error; however, the investigation did not identify the '
 'contaminating microorganism(s). The investigation was approved by Quality '
 'Assurance on 09/05/2019.  e Out-of-Specification Laboratory Investigation '
 'Report OOS 19-066-W was initiated on 05/11/2019 for the sterility test '
 'failure of Vancomycin HCI 1.25g added to 0.9% Sodium Chloride (b) (4) lot '
 'number 1219008696. The potential root cause identified in Deviation '
 'Investigation (DV-19-472-W) was human error; however, the investigation did '
 'not identify the contaminating microorganism(s). The investigation was '
 'approved by Quality Assurance on 08/05/2019.  e Out-of-Specification '
 'Laboratory Investigation Report OOS 19-071-W was initiated on 05/28/2019 for '
 'the sterility test failure of Glycopyrrolate 0.2mg/mL (b) (4) Syringe(b) (4) '
 'lot number 1219009160. The potential root cause identified in Deviation '
 'Investigation (DV-19-553-W) was human error; however, the investigation did '
 'not identify the contaminating microorganism(s). The investigation was '
 'approved by Quality Assurance on 08/30/2019.  e Out-of-Specification '
 'Laboratory Investigation Report OOS 19-074-W was initiated on 05/31/2019 for '
 'the sterility test failure of Phenylephrine HCl 40mcg/mL in 0.9% Sodium '
 'Chloride (b) (4) Syringe (b) (4) lot number 1219009289. The potential root '
 'cause identified in Deviation Investigation (DV-19-554-W) was  human error; '
 'however, the investigation did not identify the contaminating '
 'microorganism(s). The investigation was approved by Quality Assurance on '
 '08/30/2019. e Out-of-Specification Laboratory Investigation Report OOS '
 '19-123-W was initiated on 09/25/2019 for the sterility test failure of Me '
 'HCl 100mcg/mL in 0.9% Sodium Chloride (6) (4) Syringe (b) (4) lot number '
 '1219012541. A definitive root cause had not been determined but the '
 'Deviation Investigation (DV- 19-810-W) indicated the possible root cause was '
 'human error; however, the investigation did not identify the contaminating '
 'microorganism(s). The investigation was approved by Quality Assurance on '
 '10/18/2019. Furthermore, it was noted that from January 2019 to October 2019 '
 'the firm had approximately 105 occasions in which Personnel Exit Monitoring '
 'had exceeded the action limit specification for zero objectionable organisms '
 'mostly concerning samples taken from operator hoods (32 occurrences) and '
 'chests (50 occurrences); however, the firm had not identified a potential '
 'cause for this trend until the Environmental and Personnel Monitoring (b) '
 '(4) Trend Report which was approved by Quality on 10/29/2019 during the '
 'inspection. Examples of the objectionable organisms recovered were Bacillus '
 'cereus, Staphylococcus aureus, Moraxella osloensis, and Roseomonas mucosa.  '
 'B. On 08/14/2019 the firm had initiated an Out-of-Specification '
 'Investigation Report OOS-19- 111-W for a potency failure for the T90 (90 '
 'days) stability sample of Heparin Sodium 10units/mL in 0.9% Sodium Chloride '
 '(b) (4) _ lot number 1219008741, result 82%, specification (b) (4)%. The OOS '
 'result was confirmed and the firm had initiated a Deviation Investigation '
 '(DV-19-711-W) on 08/15/2019 to investigate this failure. The firm had Na) '
 'the root cause as inconclusive and took the following corrective actions: (b '
 '(4  _ The firm had not conducted a health hazard  evaluation of the '
 'sub-potent product nor had they notified the customers who had received OM '
 'lots of this product with the 90 day BUD, some of which are currently within '
 'expiry.  c. On 08/16/2019, the firm initiated a Deviation Investigation '
 'Report DV-19-716-W to espeate — within the (6) (4) (b) (4) assembly (SCA '
 'part# (Db) (4)) at the (b) (4) side during (| b) (4) testing. The im '
 'isolated this leaking (®) @)to one lot of ©)  (lot number (b) (4) » This) '
 '@)iot was used to manufacture ™™ batches of products in which ~ batches had '
 '(aye istributed. The investigation indicated that the leaking would occur '
 'between(b) (4 The firm concluded that based on investigational  testing, '
 'ster te testing, successful ib) (4) testing and risk assessment that the '
 'leaking of the (6) (4) (©) @ had no impact to patient safety; however, the '
 'firm had not provided samples from the lot of defective (b) (4) (©) (4)... '
 'their vendor for evaluation and confirmation that the’ (b) (4) would '
 'function as designed. The manufacturer of the  (b) (4)(b) (4) 4)(b) ( ) (4) '
 ') had provided a written assessment of the functionality of the (®) @) on '
 'October 21, 2019 (during the inspection) without an evaluation of this lot '
 'of defective(b) (4)  D. The Quality Unit failed to adequately investigate '
 'consumer complaints by not evaluating retentions samples and returned '
 'product when applicable for confirmation of the reported complaint. For '
 'example:  e Customer Complaint Form CUS-18-189-W, dated 11/13/2018, '
 'indicated that a customer called stating the nurse from the floor was '
 'reporting more hemorrhages on the L&D floor than normal. They had five '
 'patients in one day hemorrhage. The customer was requesting potency data on '
 'Oxytocin 20units added to 0.9% Sodium Chloride 1000ml Bag lot number '
 '1218004043. The investigation concluded that there was no impact to product '
 'identified as the potency of lot number 1218004043 was confirmed to be '
 'within specification via batch record review. The firm did not conduct an '
 'evaluation of retain samples. The investigation was approved by Quality on '
 '12/27/2018.  e Customer Complaint Form CUS-19-028-W, dated 2/26/2019, '
 'indicated that a customer had administered © different ba gs of Oxytocin '
 '20units added to 0.9% Sodium Chloride 500mL Bag lot number 1219006051 to ©) '
 '@)different pregnant patients and in which their cervixes did not dilate '
 'after receiving this product. The investigation concluded that there was no '
 'impact to product identified as the potency of lot number 1219006051 was '
 'confirmed to be within specification via batch record review. The firm did '
 'not conduct an evaluation of retain samples. On 05/22/2019 the firm '
 'received) @nnits from lot number 1219006051 from their customer. The units '
 'were not evaluated but instead were destroyed. The investigation was '
 'approved by Quality on 04/03/2019.  e Customer Complaint Form CUS-19-051-W, '
 'dated 04/25/2019, indicated that a customer stated that Oxytocin 20units '
 'added to 0.9% Sodium Chloride 1000mL Bag lot number 1219007516 was not '
 'working on patients. The investigation concluded that there was no impact to '
 'product identified as the potency of lot number 1219007516 was confirmed to '
 'be within specification via batch record review. The firm did not conduct an '
 'evaluation of retain samples. The investigation was approved by Quality on '
 '05/20/2019.  Furthermore, the firm has had sixteen Out-of-Specification '
 'Investigations involving sub- potent Oxytocin 20 and 30 unit products '
 'compounded from October 2018 to March 2019. Each of these investigations '
 'confirmed the potency out-of-specification result and the batches were '
 'rejected; however, the above mentioned complaint investigations did not '
 'contain an evaluation of these Out-of-Specification Investigations within '
 'the investigation summary. As a result of these investigations the firm '
 'initiated Change Control TCC#19- 073-W (3/18/2019) to update the compounding '
 'process to (b) (4)  (Oxytocin 20 units (F008446-A-W-02-05) & Oxytocin 30 '
 'units (F08544-A-W-02-04)).  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  Lonza Houston, Inc
Record Date:  2020-12-10 00:00:00
Topic Probability:  0.9964690804481506
Observation: 

('Physical and electronic control of material storage areas is not adequate. '
 'Specifically:  a) There is no separate storage area for different (Db) (4) '
 'products to prevent mix-ups. Bottles of (B) (4) _ intended for the U.S. '
 'market, EU market, and material derived from engineering runs are stored '
 'together in the same bin within freezer (D) (4) . This bin is also used to '
 'store () (4) material that has been rejected by the Quality Unit but is '
 'being released to the client for non-clinical use. Of note, there are '
 'differences between the U.S. and EU (b) (4) manufacturing processes.  b) '
 'Bottles of different status materials are stored immediately adjacent to one '
 'another and primary bottle  labels for the (D) (4) are not adequately '
 'designed to prevent mix-ups. Master U.S.  label (#02-00263 v1), Master EU '
 'label (#02-00318 v1), and Master Engineering label (#02-00316 v1) are  the '
 'same dimensions (~2inch x 3inch), font, and colors (black text on white '
 'background). There is no barcode present for direct electronic control. '
 'Bottles of both accepted and rejected material are designated by a '
 '“RELEASED” label that has green background and black text with identical '
 'font.  Freezer unit (Db) (4) in room (b) (4). which is used to store the '
 '(BD) (4) and (b) (4)  (b) (4) is poorly maintained and organized. During '
 'inspection of the freezer on December 3, 2020, it was noted that the bottom '
 'of the freezer was filled with bottles of (b) (4) . many of which were '
 'overturned. The bin containing the (b) (4) was stored directly on top of the '
 'bottles. There was substantial frost build-up on the © bottles at the bottom '
 'of the unit and on the shelves.  d) , and  )in  On December 3, 2020, we '
 'observed materials including” bags of media, bottles of (b) (4) samples '
 'located in 15mL conical tubes stored on a metal rack (marked with location '
 'code (D) (4) the °C storage room Ab) (4) used for incoming materials '
 'storage.  The metal rack does not have locations allocated in SAP material '
 'inventory management software and there is no physical control such as '
 'labels to indicate the status of materials stored on the rack. Your QC '
 'Project Lead stated these materials are samples under test, including '
 'material acceptance and stability protocol samples, but there is no visual '
 'or physical indication of this.  e) On December 3. 2020 we observed freezer '
 '(1D) (4) in the warehouse storage room(b) (4) to be  unlocked. This freezer '
 'is used to store quarantined materials and contained several quarantined '
 'items at the time of inspection. Procedure USWV-16230, “Receiving and '
 'Release of Materials, Supplies and Equipment for GMP Use” states “Freezers '
 'and refrigerators that can be locked will be kept locked.”  f) During review '
 'of the SAP materials management system on December 9, 2020, we noted that '
 'there were five expired batches of (D) (4) —_ (part number (1) (4) ) that '
 'had not been discarded. Batches (b) (4) expired on April 30, 2020. Batches '
 '(DB) (4) and (b) (4) expired on September 30, 2020. Procedure USWV-27862, '
 '“Disposition of Expired and Recalled Materials from GMP Inventory” states '
 'that materials should be disposed of within (b) (4) of expiration.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  Hospira Inc
Record Date:  2020-01-17 00:00:00
Topic Probability:  0.9958623647689819
Observation: 

('Acceptance criteria for the sampling and testing conducted by the quality '
 'control unit is not adequate to assure that batches of drug products meet '
 'each appropriate specification and appropriate statistical quality control '
 'criteria as a condition for their approval and release.  Specifically, your '
 'overall endotoxin control strategy is inadequate and does not meet the '
 'requirements established in SOP-9605 (6) (4) Monitoring Program and cGMPs.  '
 'A. There is no direct/formal confirmation of endotoxin sample hold time '
 'during the manufacture of the Nivestim™ biologic drug product, including but '
 'not limited to bulk samples from lot 01320DD, during  compounding (BPR — '
 'Compounding (b) (4) ) and unit samples from vial filling (BPR — Filling (b) '
 '(4) operations, ensuring conformance to time limitations established during '
 'the (b) (4) validation (PQR0056.00-16-08).  B. The (b) (4) systems '
 'supporting the CPM (CARPUJECT™) componentry workflow fail to achieve  your '
 'targeted (b) (4) reduction of endotoxin. The performance qualifications '
 'report minimum endotoxin log reductions o an © @olass cartridge, '
 'PQR0254.00-19-02 (b)(4)il PQR0254.00-19-02 (BY (4), 2.9 (plunger/rubber '
 'component, PQRO130.20-19-07) and 1.8 ™I cap, PQRO130.20-19-06). The routine  '
 '(b) (4) monitoring program for componentry (SOP-96954 Sampling of '
 'Manufacturing and Packaging Components), in absence of (b) (A) eduction in '
 'endotoxin, does not employ a statistically valid/acceptable sampling plan. '
 'For example (6) (4) glass cartridges (SOP-96954) will be assessed for '
 'endotoxin from" (6) (4) batch which routinely exceeds (b) (4) units (6) (4) '
 '?  (b) (4) ).  C. The Morphine Sulfate endotoxin specifications for '
 'componentry (SOP-96054), raw materials/excipient (6)(4) ) and drug substance '
 '(b) (4) do not ensure the finished drug product will meet specification (b) '
 '(4) , If the drug substance, raw materials and componentry approach the '
 'specification limits for endotoxin, the combined endotoxin load will exceed '
 'the drug product specification. An endotoxin value in excess of the drug '
 'product specification may not be detected through finished drug product '
 'testing due to the very limited/inadequate sampling plan (e.g () (4)  out of '
 'approximately (b) (4) units for drug product, Contro (b) (4) ; (b) (4) ) D. '
 'The endotoxin control strategy does not include an evaluation (e.g. (b) (4) '
 'an (Db) (4) )  of the effect of hold time on the ability to detect endotoxin '
 'in all applicable sterile drug products (in-process / bulk and finished). '
 'Further, you have not demonstrated your ability to detect endotoxin over '
 'your specified sample storage time and conditions in complex '
 'formulations/matrices including but not limited to solubilization and/or '
 'stabilization agents.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

===============================================================================

TOPIC NUMBER  8

===============================================================================


Firm Name:  Roger Williams Medical Center
Record Date:  2019-08-14 00:00:00
Topic Probability:  0.995243489742279
Observation: 

('You did not make adequate product evaluation and take remedial action where '
 'actionable microbial contamination was found to be present in an area '
 'adjacent to the ISO 5 classified aseptic processing area during aseptic '
 'production.  Specifically, you failed to present any documentation that the '
 'pharmacy has adequately investigated or taken remedial action to control '
 'objectionable organisms found in the ISO 7 Clean rooms.  A. Routine '
 'environmental monitoring done during production on 5/13/2019, resulted in an '
 'airborne viable recovery of 2 CFU/m? of “Inpex (mold)” in the Chemo Room. '
 'You received the May 2019 environmental monitoring report on 5/21/2019 and '
 'you did not respond to the excursion until a (2)@5) of the Chemo Room was '
 'performed on 5/24/2019. You continued to produce in the ISO 5 hoods from '
 '5/21/2019 to 5/23/2019 before performing|(*) |) of the Chemo Room. For '
 'example, you produced the chemotherapy treatments Carboplatin 623 MG in NS '
 '250 MLS and Irmotecan 300 MG IV D5W500 on 5/21/2019 and Oxaliplatin 160 MG '
 'in DSW 250 MLS on 5/22/2019. You did not investigate the root cause of the '
 'excursion and assess the potential impact on drug products produced during '
 'that period.  B. Routine environmental monitoring done during production on '
 '7/23/2019, resulted in an airborne viable recovery of 3 CFU/m’ of “Irpex '
 '(mold)” fungal growth in the Center of the Chemo Room. During the '
 'environmental monitoring you produced the drug Palonosetron 25MG/S5ML IV. '
 'You received the July 2019 environmental monitoring report on 07/30/2019 and '
 'you failed to investigate the root cause of the microbial contamination, '
 'implement corrective actions, or assess the potential impact on drug '
 'products produced during that period.  C. Routine environmental monitoring '
 'done on 8/08/2018, resulted in an airborne viable recovery of 1 CFU/m? of '
 '“Aspergillus fumigatus (mold)” in the center of the Chemo Room and a surface '
 'viable recovery of 2 CFU/25cm* of gram-negative rod bacteria '
 '“Methylobacterium (bact, GNR)” in the wash sink counter of the Ante Room. '
 'You received the environmental monitoring report on 8/15/2018 and the '
 'next/(®)) 5) of the Chemo Room was performed 9 days later on 8/24/2018. You '
 'failed to investigate the root cause of the microbial contamination and  '
 'implement corrective actions. In addition, you failed to present any '
 'assurance objectionable organisms present in the ISO 7 Ante Room are not '
 'transferred to the (4) ISO 7  Chemo Room from personnel movement between the '
 'two rooms.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  John L. McClellan Memorial Veterans Hospital
Record Date:  2020-01-23 00:00:00
Topic Probability:  0.9942987561225891
Observation: 

('he facility design of your cleanroom does not have a suitable construction '
 'to facilitate cleaning, maintenance, and proper operations.  Specifically, '
 'A. Your firm ground floor inpatient pharmacy was observed to have two (2) '
 'wooden doors:  ¢ Wooden door that separates the anteroom from the general '
 'pharmacy area; and a observations, and dd‘not représent ‘a final Agericy '
 'determination régardiig your comphance. If you have an objection regarding '
 'an observation, or have implemented, or plan to implement, corrective action '
 'in response to an observation, you may discuss the objection or action with '
 'the FDA representative(s) during the inspection or submit this information '
 'to FDA at the address above. If you have any questions, please contact FDA '
 'at the phone number and address above.  According to your most recent '
 'certification report, dated 11 November 2019, this compounding area is a '
 'segregated compounding area (SCA) and contains (b) (4), LAFH (1SO-5 '
 "Classified) in an unclassified area. Your firm's Chief of Pharmacy stated "
 'STAT Gammediate use) for low-nsk Compounded Sterile Product (CSP) orders are '
 'prepared in  the LAFHs ([SO-5 Classified) of this area as a contingency '
 'compounding area. This area was converted to a SCA in  September '
 '2019.            B. Your firm utilizes(b) (4 Refrigerators to store drug '
 'products, located in your “(b) (4) Mobile Unit Hazardous and Non- azardous '
 '(ISO-7 Classified) Areas. According to the Service Manual provided by your '
 'firm’s HVAC Supervisor for Engineering, preventative maintenance and routine '
 'cleanings are to be performed on this equipment. For example, but are not '
 'mae to os condenser grill is to be cleaned (6)(4) the high and low '
 'temperature alarms are to be tested (B (4 b) ( ‘3 addition, a condensation '
 'evaporation water tray i is eat on the backside of the refrigerators, which '
 '1 is  Pooling of water may occur if the (BYP is not working properly (i.e. { '
 'alarms are to be tested             However, according to your firm’s Chief '
 'of Pharmacy, preventative maintenance has not been performed since September '
 '2018.  ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Firm Name:  John L. McClellan Memorial Veterans Hospital
Record Date:  2020-01-23 00:00:00
Topic Probability:  0.9932112693786621
Observation: 

('& 8): the condensation unit or water evaporation tray of the refrigerators '
 'located in the [SO-7 Classified areas (Please refer to OBSERVATION 4, 7, & '
 '8); inadequate cleaning practices (Please refer to OBSERVATIONS 1, 3, 6); '
 'non-sterile gowning, and/or exposed skin (Please refer to OBSERVATION 5). In '
 'addition, your firm’s inpatient pharmacy supervisor stated (6)(@)) cleanings '
 'are routinely scheduled to occur prior to EM sampling.  Your firm continued '
 'aseptic operations in this room from 18 September 2019 — present, with the '
 'exception of the following closures: « 15 —30 October 2019  ¢ 04-18 December '
 '2019 observations, and do not represent a tinal Agency determination '
 'regarding your compliance. lt you have an objection regarding an '
 'observation, or have implemented, or plan to implement, corrective action in '
 'response to an observation, you may discuss the objection or action with the '
 'FDA representative(s) during the inspection or submit this information to '
 'FDA at the address above. If you have any questions, please contact FDA at '
 'the phone number and address above.  fu) Count 07/08/2019 Trailer- Hazard '
 'Room corner — between BSCs) 09/18/2019 Trailer-?*: Hazard Room Gram-positive '
 'rods;  (corner — between BSCs) Micrococcus: Staphylococcus  Colagulase (-); '
 'and Other Fungi  09/18/2019 Trailer™® Hazard AnteRoom Gram-positive rods; '
 '(Shelf) Micrococcus; Staphylococcus  09/30/2019 Trailer-~~ Hazard Room Near '
 'Gram-negative rods; Staphylococcus  Colagulase (- ); and Other  10/08/2019 '
 'Trailer}: Hazard Room Near Gram-negative rods; ae  11/26/2019 aes Hazard '
 'Room Near Other Fungi  According to your firm’s 6-month prescription log, '
 'your firm compounded approximately (6) (A)units of sterile drug products in '
 'your firm’s Hazardous Room.           ')

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Identify Which Topics Particular Auditors Care About

Expanding on the methodology used above, a similar approach can be used to evaluate which topics individual auditors have cared about in the past two years. This can be done by separating each obersvation into unique rows for each Investigator assigned to each Audit.

NOTE: This portion of the analysis is somewhat difficult to clean the text from. There is a severe limitation in trying to extract auditors associated with each audit from the scanned in PDF of the Form 483 available in the FDA Reading Room. Specifically, extracting auditor information requires cropping the first page of the Form 483 to the section which contains the names of the auditors. Since not all documents are scanned in with identical margins, there is room for error when cropping algorithm attempts to parse information from documents which weren't properly aligned.

In [25]:
# filter out rows which don't contain Investigator
ad = rr2[~rr2['auditors'].isnull()]
ad = ad[ad['auditors'].str.contains("Investigator")]

# separate into rows where each row has an auditor
titles = ['Investigator - Team Biologics', 'National Expert']
ad = ad.assign(auditors = ad['auditors'].str.replace(r'National Expert', 'Investigator').str.replace(r'Investigator - Team Biologics', 'Investigator').str.split(r'Investigator')).explode('auditors')
ad['auditors'] = ad['auditors'].str.replace(',', ' ').str.strip()
ad = ad[ad['auditors'] != '']
print(ad.shape)
ad.head()
(510, 20)
Out[25]:
index record_date fei_number company_name record_type state establishment_type_x publish_date href pdf_url pdf_name firm_name establishment_type_y facility_city auditors audit_dates observations topic_number topic_probability month
0 2 2021-01-28 3011761321 Wells Pharmacy, Inc 483 Tennessee Outsourcing Facility 2021-03-31 /media/147184/download https://www.fda.gov/media/147184/download WellsPharmacy508ed_0 Wells Pharmacy, Ine CIty STATE ZIP CODE, C... 490 Us Highway ol Byp N TYPE ESTABLISHMENT... Wells Pharmacy, Ine CITY, STATE, ZIP CODE,... June P Page JIN DATE(S) OF INSPEGTION 12/1/2020-1/28/2021+ There is a failure to thoroughly review the fa... 7 0.138574 2021-01-01
0 2 2021-01-28 3011761321 Wells Pharmacy, Inc 483 Tennessee Outsourcing Facility 2021-03-31 /media/147184/download https://www.fda.gov/media/147184/download WellsPharmacy508ed_0 Wells Pharmacy, Ine CIty STATE ZIP CODE, C... 490 Us Highway ol Byp N TYPE ESTABLISHMENT... Wells Pharmacy, Ine CITY, STATE, ZIP CODE,... Julius I Jones JIN DATE(S) OF INSPEGTION 12/1/2020-1/28/2021+ There is a failure to thoroughly review the fa... 7 0.138574 2021-01-01
0 2 2021-01-28 3011761321 Wells Pharmacy, Inc 483 Tennessee Outsourcing Facility 2021-03-31 /media/147184/download https://www.fda.gov/media/147184/download WellsPharmacy508ed_0 Wells Pharmacy, Ine CIty STATE ZIP CODE, C... 490 Us Highway ol Byp N TYPE ESTABLISHMENT... Wells Pharmacy, Ine CITY, STATE, ZIP CODE,... June P Page JIN DATE(S) OF INSPEGTION 12/1/2020-1/28/2021+ Buildings used in the manufacture, processing,... 7 0.184301 2021-01-01
0 2 2021-01-28 3011761321 Wells Pharmacy, Inc 483 Tennessee Outsourcing Facility 2021-03-31 /media/147184/download https://www.fda.gov/media/147184/download WellsPharmacy508ed_0 Wells Pharmacy, Ine CIty STATE ZIP CODE, C... 490 Us Highway ol Byp N TYPE ESTABLISHMENT... Wells Pharmacy, Ine CITY, STATE, ZIP CODE,... Julius I Jones JIN DATE(S) OF INSPEGTION 12/1/2020-1/28/2021+ Buildings used in the manufacture, processing,... 7 0.184301 2021-01-01
0 2 2021-01-28 3011761321 Wells Pharmacy, Inc 483 Tennessee Outsourcing Facility 2021-03-31 /media/147184/download https://www.fda.gov/media/147184/download WellsPharmacy508ed_0 Wells Pharmacy, Ine CIty STATE ZIP CODE, C... 490 Us Highway ol Byp N TYPE ESTABLISHMENT... Wells Pharmacy, Ine CITY, STATE, ZIP CODE,... June P Page JIN DATE(S) OF INSPEGTION 12/1/2020-1/28/2021+ for additional Quality Unit concerns. 8 0.022227 2021-01-01

Most Prevalent Auditors

In [26]:
top_auditors = ad.groupby('auditors').size().reset_index(name = 'count').sort_values(by = 'count', ascending = False)[:10].sort_values(by = 'count')
fig = px.bar(top_auditors, x = 'count', y = 'auditors', orientation = 'h', 
            title = 'Auditors with the most observations attributed to their audits')
fig

Top 3 Observation Topics for Each Auditor

In [27]:
ad2 = ad.groupby(['auditors', 'topic_number']).size().reset_index(name = 'observations')
ad3 = ad.groupby('auditors').size().reset_index(name = 'total_observations')
ad_merged = ad2.merge(ad3, how = 'left').sort_values(by = 'total_observations', ascending = False)
ad_merged[ad_merged['auditors'] == "John P Mistler"].sort_values(by = 'observations', ascending = False)

auditor_list = list(ad_merged['auditors'].unique())
for auditor in auditor_list:
    ad_x = ad_merged[ad_merged['auditors'] == auditor]
    print("\n===============================================================================\n")
    print("AUDITOR: ", auditor)
    top_topics = ad_x[ad_x['auditors'] == auditor].sort_values(by = 'observations', ascending = False)[:3]
    print("Total Observations: ", top_topics['total_observations'].iloc[0])
    print("Top Topics: ")
    for index, row in top_topics.iterrows():
        print("\tTopic Number ", row['topic_number'], " (", row['observations'], " Observations )")
    print("\n===============================================================================\n")
===============================================================================

AUDITOR:  Jonah S Ufferfilge
Total Observations:  21
Top Topics: 
	Topic Number  7  ( 7  Observations )
	Topic Number  3  ( 6  Observations )
	Topic Number  2  ( 4  Observations )

===============================================================================


===============================================================================

AUDITOR:  Erika V Butler
Total Observations:  20
Top Topics: 
	Topic Number  7  ( 11  Observations )
	Topic Number  8  ( 6  Observations )
	Topic Number  5  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Djamila Harouaka  FDA Center Employee or Employee of Other Federal Agencies
Total Observations:  16
Top Topics: 
	Topic Number  7  ( 8  Observations )
	Topic Number  3  ( 3  Observations )
	Topic Number  6  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  Erik W Koester
Total Observations:  16
Top Topics: 
	Topic Number  7  ( 8  Observations )
	Topic Number  3  ( 3  Observations )
	Topic Number  2  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  Joanne E King
Total Observations:  16
Top Topics: 
	Topic Number  7  ( 8  Observations )
	Topic Number  3  ( 3  Observations )
	Topic Number  6  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  As haan a ge ee Oe ee emt Sg ew  Jessica L Pressley
Total Observations:  16
Top Topics: 
	Topic Number  7  ( 6  Observations )
	Topic Number  8  ( 4  Observations )
	Topic Number  5  ( 3  Observations )

===============================================================================


===============================================================================

AUDITOR:  Jon P Antoniou
Total Observations:  15
Top Topics: 
	Topic Number  4  ( 12  Observations )
	Topic Number  7  ( 1  Observations )
	Topic Number  3  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Se hee) a gee ee Peele het a 9 ew  Bei Y He
Total Observations:  15
Top Topics: 
	Topic Number  4  ( 12  Observations )
	Topic Number  3  ( 1  Observations )
	Topic Number  7  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  John P Mistler
Total Observations:  14
Top Topics: 
	Topic Number  7  ( 7  Observations )
	Topic Number  3  ( 3  Observations )
	Topic Number  2  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  Samir C Gala
Total Observations:  14
Top Topics: 
	Topic Number  7  ( 7  Observations )
	Topic Number  3  ( 3  Observations )
	Topic Number  2  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  Camerson E Moore
Total Observations:  14
Top Topics: 
	Topic Number  7  ( 5  Observations )
	Topic Number  8  ( 5  Observations )
	Topic Number  3  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  Julius I Jones
Total Observations:  13
Top Topics: 
	Topic Number  7  ( 8  Observations )
	Topic Number  8  ( 3  Observations )
	Topic Number  3  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  -
Total Observations:  13
Top Topics: 
	Topic Number  7  ( 7  Observations )
	Topic Number  5  ( 3  Observations )
	Topic Number  6  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  een ener Sr merge = d > “et Unnee Ranjan
Total Observations:  13
Top Topics: 
	Topic Number  7  ( 7  Observations )
	Topic Number  5  ( 3  Observations )
	Topic Number  6  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  s Rciw it Lata Mathew
Total Observations:  13
Top Topics: 
	Topic Number  7  ( 7  Observations )
	Topic Number  5  ( 3  Observations )
	Topic Number  6  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  xf a sal Saleem Akhtar
Total Observations:  13
Top Topics: 
	Topic Number  7  ( 7  Observations )
	Topic Number  5  ( 3  Observations )
	Topic Number  6  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  pee >  Ko Min
Total Observations:  13
Top Topics: 
	Topic Number  7  ( 7  Observations )
	Topic Number  5  ( 3  Observations )
	Topic Number  6  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  June P Page
Total Observations:  13
Top Topics: 
	Topic Number  7  ( 8  Observations )
	Topic Number  8  ( 3  Observations )
	Topic Number  3  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  John M Mastalski
Total Observations:  11
Top Topics: 
	Topic Number  7  ( 8  Observations )
	Topic Number  3  ( 1  Observations )
	Topic Number  5  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  TRICTHOSOOTIMaAi.sr mMNnonrmtri. TIT
Total Observations:  11
Top Topics: 
	Topic Number  7  ( 8  Observations )
	Topic Number  5  ( 1  Observations )
	Topic Number  8  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Mindy M Chou
Total Observations:  11
Top Topics: 
	Topic Number  7  ( 6  Observations )
	Topic Number  3  ( 3  Observations )
	Topic Number  5  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Se Ei Te Go ee Se te ee ee  Jazmine N Still
Total Observations:  10
Top Topics: 
	Topic Number  7  ( 7  Observations )
	Topic Number  6  ( 2  Observations )
	Topic Number  8  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Simone E Pitts
Total Observations:  10
Top Topics: 
	Topic Number  7  ( 7  Observations )
	Topic Number  6  ( 2  Observations )
	Topic Number  8  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Scott A Golladay
Total Observations:  10
Top Topics: 
	Topic Number  7  ( 7  Observations )
	Topic Number  6  ( 2  Observations )
	Topic Number  8  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Seneca D Toms
Total Observations:  9
Top Topics: 
	Topic Number  7  ( 4  Observations )
	Topic Number  8  ( 2  Observations )
	Topic Number  4  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  a ee  SS See ee OR eS eee eee  Jared P Stevens
Total Observations:  9
Top Topics: 
	Topic Number  7  ( 4  Observations )
	Topic Number  8  ( 2  Observations )
	Topic Number  3  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Jonathan G Matrisciano
Total Observations:  9
Top Topics: 
	Topic Number  3  ( 3  Observations )
	Topic Number  8  ( 2  Observations )
	Topic Number  2  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  CAS e te Aes Page ee Peet eed a a wy  Patty P Kaewussdangkul
Total Observations:  9
Top Topics: 
	Topic Number  7  ( 4  Observations )
	Topic Number  4  ( 2  Observations )
	Topic Number  3  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  Marcus F Yambot
Total Observations:  8
Top Topics: 
	Topic Number  3  ( 4  Observations )
	Topic Number  4  ( 3  Observations )
	Topic Number  7  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Christopher R Czajka
Total Observations:  8
Top Topics: 
	Topic Number  3  ( 4  Observations )
	Topic Number  4  ( 3  Observations )
	Topic Number  7  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  EMPLOYEE(S) SIGNATURE Bryan L Mcguckin
Total Observations:  7
Top Topics: 
	Topic Number  2  ( 3  Observations )
	Topic Number  7  ( 3  Observations )
	Topic Number  4  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  SE Sane a ge ee eee et a pe Ty  Samantha J Bradley  Drug
Total Observations:  7
Top Topics: 
	Topic Number  8  ( 3  Observations )
	Topic Number  6  ( 3  Observations )
	Topic Number  7  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Brian D Nicholson
Total Observations:  6
Top Topics: 
	Topic Number  7  ( 4  Observations )
	Topic Number  4  ( 1  Observations )
	Topic Number  8  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  SE San a gS ee Ot eB ee en ge We  Margaret M Annes  CSO Shanna N Purdy
Total Observations:  6
Top Topics: 
	Topic Number  1  ( 3  Observations )
	Topic Number  7  ( 2  Observations )
	Topic Number  5  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Michele L Glendenning
Total Observations:  6
Top Topics: 
	Topic Number  7  ( 4  Observations )
	Topic Number  8  ( 1  Observations )
	Topic Number  4  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Zachery L Miller
Total Observations:  5
Top Topics: 
	Topic Number  7  ( 2  Observations )
	Topic Number  8  ( 1  Observations )
	Topic Number  3  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Jason R Caballero
Total Observations:  5
Top Topics: 
	Topic Number  4  ( 2  Observations )
	Topic Number  5  ( 1  Observations )
	Topic Number  7  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Eas Se ay Fi am Pace ae  Michael A Charles
Total Observations:  5
Top Topics: 
	Topic Number  3  ( 3  Observations )
	Topic Number  8  ( 1  Observations )
	Topic Number  2  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  ay anaes PR are of dhe a sth ei EE  Russell J Glapion
Total Observations:  4
Top Topics: 
	Topic Number  7  ( 4  Observations )

===============================================================================


===============================================================================

AUDITOR:  Lauren M Lilly
Total Observations:  4
Top Topics: 
	Topic Number  7  ( 4  Observations )

===============================================================================


===============================================================================

AUDITOR:  rr tT Cc CTW TIOCAN ODOoOrW CTC SRI OFFA At See rts A Sa
Total Observations:  4
Top Topics: 
	Topic Number  7  ( 2  Observations )
	Topic Number  2  ( 1  Observations )
	Topic Number  8  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Steven E Bowen
Total Observations:  4
Top Topics: 
	Topic Number  7  ( 4  Observations )

===============================================================================


===============================================================================

AUDITOR:  en ee em se ee ee ae re ee  Miu. iz | Andrew K. Haack
Total Observations:  4
Top Topics: 
	Topic Number  7  ( 2  Observations )
	Topic Number  2  ( 1  Observations )
	Topic Number  8  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Scott T Ballard
Total Observations:  4
Top Topics: 
	Topic Number  7  ( 4  Observations )

===============================================================================


===============================================================================

AUDITOR:  (Biotechnology)  tun. 4
Total Observations:  3
Top Topics: 
	Topic Number  7  ( 2  Observations )
	Topic Number  8  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  FE | Gideon N Esuzor
Total Observations:  3
Top Topics: 
	Topic Number  4  ( 2  Observations )
	Topic Number  2  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  See Soe a ge ee Ont seed a a  Nancy M Espinal
Total Observations:  3
Top Topics: 
	Topic Number  7  ( 3  Observations )

===============================================================================


===============================================================================

AUDITOR:  EMPLOYEE(S) SIGNATURE FE | Johnetta F Walters
Total Observations:  3
Top Topics: 
	Topic Number  4  ( 2  Observations )
	Topic Number  2  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Francis A Guidry
Total Observations:  3
Top Topics: 
	Topic Number  7  ( 2  Observations )
	Topic Number  8  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  TS le ee ee Ne  Zachery L Miller
Total Observations:  3
Top Topics: 
	Topic Number  7  ( 2  Observations )
	Topic Number  3  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  William J Muszynski
Total Observations:  3
Top Topics: 
	Topic Number  7  ( 3  Observations )

===============================================================================


===============================================================================

AUDITOR:  / ‘
Total Observations:  2
Top Topics: 
	Topic Number  7  ( 1  Observations )
	Topic Number  2  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  /. 1
Total Observations:  2
Top Topics: 
	Topic Number  7  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  As haan) a gS ee ee eee Ree 9 a  Joshua P Wireman
Total Observations:  2
Top Topics: 
	Topic Number  1  ( 1  Observations )
	Topic Number  3  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  EMPLOYEES) SIGNATURE  Tamil Arasu
Total Observations:  2
Top Topics: 
	Topic Number  2  ( 1  Observations )
	Topic Number  7  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Daniel L Zheng
Total Observations:  2
Top Topics: 
	Topic Number  1  ( 1  Observations )
	Topic Number  7  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  EMPLOYEE(S) NAME AND TITLE (Prin     . Jones -S &: oa Marvin D. Jones -
Total Observations:  2
Top Topics: 
	Topic Number  8  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  ‘ { wit! tyre «  Guerlain Ulysse
Total Observations:  2
Top Topics: 
	Topic Number  2  ( 1  Observations )
	Topic Number  7  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  wer A: Ko Min
Total Observations:  2
Top Topics: 
	Topic Number  7  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  Zachary A Bogorad
Total Observations:  2
Top Topics: 
	Topic Number  1  ( 1  Observations )
	Topic Number  7  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  ENPLOYEE(S) SIGNATURE Tamil Arasu
Total Observations:  2
Top Topics: 
	Topic Number  7  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  Joey V Quitania
Total Observations:  2
Top Topics: 
	Topic Number  7  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  Robert J Martin
Total Observations:  2
Top Topics: 
	Topic Number  7  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  SE ean a gS i ee Pt eRe eg  Alan P Kurtzberg
Total Observations:  2
Top Topics: 
	Topic Number  7  ( 1  Observations )
	Topic Number  8  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Santiago Gallardo Johnson  Generic Drug User Fee Amendments (GDUFA)
Total Observations:  2
Top Topics: 
	Topic Number  7  ( 2  Observations )

===============================================================================


===============================================================================

AUDITOR:  iIGNATURE EMPLOYEE(S) NAME AND TITLE (Print c  Stephen D. Brown
Total Observations:  1
Top Topics: 
	Topic Number  3  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  David A Oluwo
Total Observations:  1
Top Topics: 
	Topic Number  8  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Jolanna A Norton  Generic Drug User Fee Amendments (GDUFA)
Total Observations:  1
Top Topics: 
	Topic Number  1  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Bryan L Mcguckin
Total Observations:  1
Top Topics: 
	Topic Number  2  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  PREVIOUS EDITION DBSULETE INSPECTIONAIL OBSERVATIO
Total Observations:  1
Top Topics: 
	Topic Number  8  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Tonia F Bernard
Total Observations:  1
Top Topics: 
	Topic Number  2  ( 1  Observations )

===============================================================================


===============================================================================

AUDITOR:  Zachary L Stamm
Total Observations:  1
Top Topics: 
	Topic Number  1  ( 1  Observations )

===============================================================================

Potential Next Steps

Reshape the df in a longer format, where each row is an audit and each column is a potential feature which might be utilized for further machine learning projects. These sparse columns could include counts of observations for each topic (i.e. each column is a topic number), whether a given auditor was involved with the audit (i.e. one column for each unique auditor name), number of words in the Form 483, number of observations, and any further regulatory actions which came after in response to the Form 483.

References